ip_discovery/dns/
providers.rs1use super::protocol::DnsClass;
4use super::{DnsProvider, DnsRecordType};
5use crate::provider::BoxedBlockingProvider;
6#[cfg(feature = "tokio")]
7use crate::provider::BoxedProvider;
8use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
9
10pub fn google() -> DnsProvider {
13 DnsProvider::new(
14 "Google DNS",
15 "o-o.myaddr.l.google.com",
16 SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(216, 239, 32, 10), 53)), DnsRecordType::Txt,
18 )
19 .with_v6_resolver(SocketAddr::V6(SocketAddrV6::new(
20 Ipv6Addr::new(0x2001, 0x4860, 0x4802, 0x0032, 0, 0, 0, 0x000a),
21 53,
22 0,
23 0,
24 )))
25}
26
27pub fn cloudflare() -> DnsProvider {
31 DnsProvider::new(
32 "Cloudflare DNS",
33 "whoami.cloudflare",
34 SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(1, 1, 1, 1), 53)),
35 DnsRecordType::Txt,
36 )
37 .with_class(DnsClass::Ch)
38 .with_v6_resolver(SocketAddr::V6(SocketAddrV6::new(
39 Ipv6Addr::new(0x2606, 0x4700, 0x4700, 0, 0, 0, 0, 0x1111),
40 53,
41 0,
42 0,
43 )))
44}
45
46pub fn opendns() -> DnsProvider {
49 DnsProvider::new(
50 "OpenDNS",
51 "myip.opendns.com",
52 SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(208, 67, 222, 222), 53)),
53 DnsRecordType::Address,
54 )
55}
56
57pub fn provider_names() -> &'static [&'static str] {
59 &["Google DNS", "Cloudflare DNS", "OpenDNS"]
60}
61
62pub fn default_blocking_providers() -> Vec<BoxedBlockingProvider> {
64 vec![
65 Box::new(cloudflare()),
66 Box::new(google()),
67 Box::new(opendns()),
68 ]
69}
70
71#[cfg(feature = "tokio")]
73pub fn default_providers() -> Vec<BoxedProvider> {
74 vec![
75 Box::new(cloudflare()),
76 Box::new(google()),
77 Box::new(opendns()),
78 ]
79}