super_dns_client 0.3.1
super_dns_client: ^0.3.1 copied to clipboard
A modern and lightweight Dart library for performing DNS-over-HTTPS (DoH) lookups. Supports multiple resolvers and easy integration for Flutter and server-side apps.
๐งญ super_dns_client #
A modern and lightweight Dart library for performing DNS lookups via
๐น DNS-over-HTTPS (DoH) and
๐น traditional UDP/TCP resolvers โ including System and Public SRV discovery.
Built for Flutter, Dart CLI, and backend apps.
๐ Features #
- ๐ Query
A,AAAA,CNAME,SRV,TXTrecords - ๐ Supports both DoH and traditional UDP/TCP DNS
- โ๏ธ Auto-detects System-configured DNS (macOS, Linux, Android, iOS)
- ๐งฉ Public resolver support: Quad9, AdGuard, Yandex, OpenDNS, Cloudflare, Google, Mullvad, etc.
- ๐พ Built-in TTL-based SRV cache for performance
- ๐งฑ Built with
universal_io,super_raw, andsuper_ip - โ Null-safe, well-tested, CI-integrated
๐ฆ Installation #
dependencies:
super_dns_client: ^0.3.0
Then run:
dart pub get
๐ก Example #
import 'package:super_dns_client/super_dns_client.dart';
import 'package:super_dns_client/src/udp_tcp/system_udp_srv_client.dart';
import 'package:super_dns_client/src/udp_tcp/public_udp_srv_client.dart';
void main() async {
// Example 1: DNS-over-HTTPS (Cloudflare)
final doh = DnsOverHttps.cloudflare();
final records = await doh.lookup('google.com');
for (var ip in records) {
print('DoH โ ${ip.address}');
}
// Example 2: SRV lookup via System-configured DNS
final systemClient = SystemUdpSrvClient();
final systemRecords = await systemClient.lookupSrv('_jmap._tcp.linagora.com');
for (var r in systemRecords) {
print('SystemDNS โ ${r.target}:${r.port}');
}
// Example 3: SRV lookup via Public DNS resolvers
final publicClient = PublicUdpSrvClient();
final publicRecords = await publicClient.lookupSrv('_jmap._tcp.linagora.com');
for (var r in publicRecords) {
print('PublicDNS(${r.resolverName}) โ ${r.target}:${r.port}');
}
}
โ๏ธ Available DNS Resolvers #
๐ธ DNS-over-HTTPS (DoH) #
| Provider | Endpoint URL |
|---|---|
https://dns.google/dns-query |
|
| Cloudflare | https://cloudflare-dns.com/dns-query |
| Quad9 | https://dns.quad9.net/dns-query |
| AdGuard | https://dns.adguard-dns.com/dns-query |
| Mullvad | https://doh.mullvad.net/dns-query |
| Yandex | https://dns.yandex.com/dns-query |
| OpenDNS | https://doh.opendns.com/dns-query |
๐ธ Traditional (UDP/TCP) #
- System-configured resolvers (
/etc/resolv.conf, Androidgetprop, iOS fallback) - Public resolvers (Quad9, AdGuard, Yandex, OpenDNS)
- TCP fallback if UDP is truncated or timed out
๐งช Run Tests #
dart test
๐ชช License #
Licensed under the MIT License.
See LICENSE for details.
โค๏ธ Contributing #
Pull requests and ideas are welcome!
Open an issue or PR at GitHub Issues.
๐ Example Output #
DnsOverHttps.cloudflare::SRV โ _jmap._tcp.linagora.com โ jmap.linagora.com:443
SystemUdpSrvClient::SRV โ linagora.com:443
PublicUdpSrvClient(quad9)::SRV โ jmap.linagora.com:443
๐ง Summary #
| Feature | Status |
|---|---|
| DoH (Google/Cloudflare) | โ |
| Binary DoH (Quad9, Mullvad) | โ |
| UDP/TCP SRV resolver | โ |
| System DNS detection | โ |
| Public resolver list | โ |
| TTL cache | โ |
| IPv6 support | โ |
โจ Since v0.3.0:
super_dns_clientis now a hybrid DNS resolver supporting
both DoH and UDP/TCP SRV record lookups with automatic fallback.