use ip_discovery::{get_ip_with, BuiltinProvider, Config, IpVersion, Protocol, Strategy};
use std::time::Duration;
#[tokio::main]
async fn main() {
println!("=== DNS Only ===\n");
let config = Config::builder()
.protocols(&[Protocol::Dns])
.version(IpVersion::V4)
.build();
match get_ip_with(config).await {
Ok(result) => println!("DNS IP: {} ({:?})\n", result.ip, result.latency),
Err(e) => println!("DNS failed: {}\n", e),
}
println!("=== Specific Providers ===\n");
let config = Config::builder()
.providers(&[BuiltinProvider::CloudflareDns, BuiltinProvider::GoogleStun])
.build();
match get_ip_with(config).await {
Ok(result) => println!(
"IP: {} via {} ({:?})\n",
result.ip, result.provider, result.latency
),
Err(e) => println!("Failed: {}\n", e),
}
println!("=== Race Strategy ===\n");
let config = Config::builder()
.strategy(Strategy::Race)
.timeout(Duration::from_secs(5))
.build();
match get_ip_with(config).await {
Ok(result) => {
println!(
"Fastest: {} via {} ({:?})\n",
result.ip, result.provider, result.latency
);
}
Err(e) => println!("Race failed: {}\n", e),
}
println!("=== Consensus Strategy (min 2 agree) ===\n");
let config = Config::builder()
.strategy(Strategy::Consensus { min_agree: 2 })
.timeout(Duration::from_secs(10))
.build();
match get_ip_with(config).await {
Ok(result) => {
println!("Consensus IP: {}\n", result.ip);
}
Err(e) => println!("Consensus failed: {}\n", e),
}
println!("=== Available Providers ===");
for provider in BuiltinProvider::ALL {
println!(" - {} ({})", provider, provider.protocol());
}
}