我需要发送DNS请求来检查域的A,AAAA,MX和SOA记录.
有两个流行的DNS库:trust-dns和dns-parser.他们俩都没有例子.trust-dns不支持我需要做的事情,而dns-parser的文档也无济于事.
该域名箱子似乎支持你usecases.它还建立在期货之上,非常适合所需的网络请求.
extern crate domain;
extern crate futures;
extern crate tokio_core;
use std::str::FromStr;
use domain::bits::{DNameBuf, ParsedDName};
use domain::iana::{Class, Rtype};
use domain::rdata::{A, Aaaa, Mx, Soa};
use domain::resolv::Resolver;
use futures::Future;
use tokio_core::reactor::Core;
fn main() {
let mut core = Core::new().unwrap();
let resolv = Resolver::new(&core.handle());
let name = DNameBuf::from_str("www.rust-lang.org.").unwrap();
let v4 = resolv.clone().query((name.clone(), Rtype::A, Class::In));
let v6 = resolv.clone().query((name.clone(), Rtype::Aaaa, Class::In));
let mx = resolv.clone().query((name.clone(), Rtype::Mx, Class::In));
let soa = resolv.query((name, Rtype::Soa, Class::In));
let addrs = v4.join4(v6, mx, soa);
let (v4, v6, mx, soa) = core.run(addrs).unwrap();
println!("-- A --");
for record in v4.answer().unwrap().limit_to::<A>() {
println!("{}", record.unwrap());
}
println!("-- AAAA --");
for record in v6.answer().unwrap().limit_to::<Aaaa>() {
println!("{}", record.unwrap());
}
println!("-- MX --");
for record in mx.answer().unwrap().limit_to::<Mx<ParsedDName>>() {
println!("{}", record.unwrap());
}
println!("-- SOA --");
for record in soa.answer().unwrap().limit_to::<Soa<ParsedDName>>() {
println!("{}", record.unwrap());
}
}
Run Code Online (Sandbox Code Playgroud)
我在今天之前从未见过这个箱子,所以我不知道我正确或有效地使用它,但它似乎确实有效.
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |