This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use trust_dns_resolver::config::*; | |
use trust_dns_resolver::Resolver; | |
// Note you should add the crate to your Cargo.toml file | |
// trust-dns-resolver = "0.20.1" | |
fn main() { | |
// Construct a new Resolver with default configuration options | |
let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); | |
// Lookup the IP addresses associated with a name. | |
// The final dot forces this to be an FQDN, otherwise the search rules as specified | |
// in `ResolverOpts` will take effect. FQDN's are generally cheaper queries. | |
let mx_response = resolver.mx_lookup("gmail.com."); | |
// There can be many addresses associated with the name, | |
// this can return IPv4 and/or IPv6 addresses | |
match mx_response { | |
Err(_) => println!("No Records"), | |
Ok(mx_response) => { | |
let records = mx_response.iter(); | |
for record in records { | |
println!("{} {}", record.preference(), record.exchange()); | |
let lookup_response = resolver.lookup_ip(record.exchange().to_string().as_str()); | |
match lookup_response { | |
Err(_) => println!("This exchange host has no address."), | |
Ok(lookup_response) => { | |
let ip_addrs = lookup_response.iter(); | |
for ip_addr in ip_addrs { | |
if ip_addr.is_ipv4() { | |
println!(" ip4: {}", ip_addr) | |
} else { | |
println!(" ip6: {}", ip_addr) | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} |