天天看點

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

介紹

Trust-DNS是一個實作DNS協定和用戶端功能的庫。該庫包含DNS記錄序列化和通信的基本實作,通過它能夠執行查詢、更新和通知等操作。Trust-DNS Resolver是對應的DNS解析庫,包括對應的IPv4和IPv6的一些實作。

使用示例

依賴

[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);
    }
}      

運作

cargo run baidu.com//注意,不要用www.baidu.com,否則會查詢不到      

繼續閱讀