|
@@ -25,29 +25,61 @@ use tokio::task::JoinHandle; |
|
|
use trust_dns_resolver::TokioAsyncResolver; |
|
|
use trust_dns_resolver::TokioAsyncResolver; |
|
|
use trust_dns_resolver::config::{NameServerConfig, Protocol, ResolverConfig, ResolverOpts}; |
|
|
use trust_dns_resolver::config::{NameServerConfig, Protocol, ResolverConfig, ResolverOpts}; |
|
|
|
|
|
|
|
|
|
|
|
use whoami::{platform, Platform}; |
|
|
|
|
|
|
|
|
pub async fn create_resolver(dns1_sock: SocketAddr, dns2_sock: SocketAddr) -> TokioAsyncResolver { |
|
|
pub async fn create_resolver(dns1_sock: SocketAddr, dns2_sock: SocketAddr) -> TokioAsyncResolver { |
|
|
let mut resolver_config: ResolverConfig = ResolverConfig::new(); |
|
|
let mut resolver_config: ResolverConfig = ResolverConfig::new(); |
|
|
|
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns1_sock, |
|
|
|
|
|
protocol: Protocol::Udp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns1_sock, |
|
|
|
|
|
protocol: Protocol::Tcp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns2_sock, |
|
|
|
|
|
protocol: Protocol::Udp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns2_sock, |
|
|
|
|
|
protocol: Protocol::Tcp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
let platform : Platform = platform(); |
|
|
|
|
|
match platform { |
|
|
|
|
|
Platform::Windows => { |
|
|
|
|
|
// try TCP first on Windows, UDP sockets may have permission issues (?) |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns1_sock, |
|
|
|
|
|
protocol: Protocol::Tcp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns2_sock, |
|
|
|
|
|
protocol: Protocol::Tcp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns1_sock, |
|
|
|
|
|
protocol: Protocol::Udp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns2_sock, |
|
|
|
|
|
protocol: Protocol::Udp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
_ => { |
|
|
|
|
|
// try UDP first on all other platforms, usually faster |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns1_sock, |
|
|
|
|
|
protocol: Protocol::Udp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns2_sock, |
|
|
|
|
|
protocol: Protocol::Udp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns1_sock, |
|
|
|
|
|
protocol: Protocol::Tcp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
resolver_config.add_name_server(NameServerConfig { |
|
|
|
|
|
socket_addr: dns2_sock, |
|
|
|
|
|
protocol: Protocol::Tcp, |
|
|
|
|
|
tls_dns_name: None |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
TokioAsyncResolver::tokio(resolver_config, ResolverOpts::default()).await.unwrap() |
|
|
TokioAsyncResolver::tokio(resolver_config, ResolverOpts::default()).await.unwrap() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|