Trust-DNS是一個實現DNS協議和客戶端功能的庫。該庫包含DNS記錄序列化和通訊的基本實現,透過它能夠執行查詢、更新和通知等操作。Trust-DNS Resolver是對應的DNS解析庫,包括對應的IPv4和IPv6的一些實現。
本例子中,我們來實現一個查詢dns記錄的功能。
依賴
[dependencies]
trust-dns-resolver = "0.11.0"
trust-dns = "0.16.0"
原始碼
use std::env;
use trust_dns_resolver::Resolver;
use trust_dns_resolver::config::*;
use trust_dns::rr::record_type::RecordType;
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
eprintln!("Please provide a name to query");
std::process::exit(1);
}
let query = format!("{}.", args[1]);
// 建立預設解析器
println!("Using the synchronous resolver");
let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap();
let response = resolver.lookup_ip(query.as_str());
for ans in response.iter() {
println!("{:?}", ans);
}
// 根據系統配置檔案建立解析器,linux下為從/etc/resolv.conf建立
println!("Using the system resolver");
let system_resolver = Resolver::from_system_conf().unwrap();
let system_response = system_resolver.lookup_ip(query.as_str());
for ans in system_response.iter() {
println!("{:?}", ans);
}
println!("NS records using the synchronous resolver");
let ns = resolver.lookup(query.as_str(), RecordType::NS);
for ans in ns.iter() {
println!("{:?}", ans);
}
}
執行
例如查詢baidu.com的資訊
cargo run baidu.com//注意,不要用www.baidu.com,否則會查詢不到
本作品採用《CC 協議》,轉載必須註明作者和本文連結