use super::protocol::DnsClass;
use super::{DnsProvider, DnsRecordType};
use crate::provider::BoxedProvider;
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
pub fn google() -> DnsProvider {
DnsProvider::new(
"Google DNS",
"o-o.myaddr.l.google.com",
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(216, 239, 32, 10), 53)), DnsRecordType::Txt,
)
.with_v6_resolver(SocketAddr::V6(SocketAddrV6::new(
Ipv6Addr::new(0x2001, 0x4860, 0x4802, 0x0032, 0, 0, 0, 0x000a),
53,
0,
0,
)))
}
pub fn cloudflare() -> DnsProvider {
DnsProvider::new(
"Cloudflare DNS",
"whoami.cloudflare",
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(1, 1, 1, 1), 53)),
DnsRecordType::Txt,
)
.with_class(DnsClass::Ch)
.with_v6_resolver(SocketAddr::V6(SocketAddrV6::new(
Ipv6Addr::new(0x2606, 0x4700, 0x4700, 0, 0, 0, 0, 0x1111),
53,
0,
0,
)))
}
pub fn opendns() -> DnsProvider {
DnsProvider::new(
"OpenDNS",
"myip.opendns.com",
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(208, 67, 222, 222), 53)),
DnsRecordType::Address,
)
}
pub fn provider_names() -> &'static [&'static str] {
&["Google DNS", "Cloudflare DNS", "OpenDNS"]
}
pub fn default_providers() -> Vec<BoxedProvider> {
vec![
Box::new(cloudflare()),
Box::new(google()),
Box::new(opendns()),
]
}