Sfoglia il codice sorgente

try tcp first for dns resolution on windows

master
Jonathan Cobb 4 anni fa
parent
commit
f7a9ecafd3
2 ha cambiato i file con 53 aggiunte e 21 eliminazioni
  1. +52
    -20
      src/dns_cache.rs
  2. +1
    -1
      src/net.rs

+ 52
- 20
src/dns_cache.rs Vedi File

@@ -25,29 +25,61 @@ use tokio::task::JoinHandle;
use trust_dns_resolver::TokioAsyncResolver;
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 {
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()
}



+ 1
- 1
src/net.rs Vedi File

@@ -46,7 +46,7 @@ pub fn is_private_ip(ip : &String) -> bool {
}

pub fn ip_gateway() -> String {
let platform: Platform = platform();
let platform : Platform = platform();
let gateway = match platform {
Platform::Windows => {
let output = Command::new("C:\\Windows\\System32\\cmd.exe")


Caricamento…
Annulla
Salva