Rust 網路程式設計,使用 trust-dns-resolver 和 trust-dns

介紹

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 = 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,否則會查詢不到