๐Ÿงญ super_dns_client

A modern, lightweight, and native-integrated DNS resolver for Dart and Flutter โ€”
supporting both DNS-over-HTTPS (DoH) and traditional UDP/TCP lookups
with system-aware DNS discovery across all major platforms.

Built for Flutter, Dart CLI, and backend apps.


๐Ÿš€ Features

  • ๐Ÿ” Query A, AAAA, CNAME, SRV, TXT records
  • ๐ŸŒ Supports DoH and traditional UDP/TCP DNS
  • ๐Ÿงฉ Native System DNS detection (macOS, Linux, Android, iOS)
  • โš™๏ธ Public resolver fallback with automatic switching
  • ๐Ÿ’พ TTL-based SRV caching
  • ๐Ÿงฑ Built with universal_io, super_raw, and super_ip
  • โœ… Null-safe, CI-tested, production-ready

๐Ÿ“ฆ 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.example.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.example.com');
  for (var r in publicRecords) {
    print('PublicDNS(${r.resolverName}) โ†’ ${r.target}:${r.port}');
  }
}

โš™๏ธ Platform-specific System DNS Detection

Platform Method Description
Android ConnectivityManager.getLinkProperties() The plugin uses a native Kotlin bridge to fetch DNS servers from the currently active network interface. Requires ACCESS_NETWORK_STATE permission.
iOS res_ninit() via Objective-C helper Calls the BSD resolver API to enumerate system DNS servers (/etc/resolv.conf equivalent).
macOS / Linux File parsing Reads /etc/resolv.conf for configured nameservers.
Web Not supported Browsers restrict raw DNS queries; DoH should be used instead.

๐Ÿง  System detection is handled automatically by SystemUdpSrvClient,
which internally uses PlatformSystemDns to bridge native resolvers.


โš™๏ธ Available DNS Resolvers

๐Ÿ”ธ DNS-over-HTTPS (DoH)

Provider Endpoint URL
Google 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 resolvers from platform configuration (Android, iOS, Linux, macOS)
  • Public resolvers (Quad9, AdGuard, Yandex, OpenDNS, Cloudflare)
  • TCP fallback for truncated UDP responses

๐Ÿงช Run Tests

dart test

๐ŸŒ Example Output

DnsOverHttps.cloudflare::SRV โ†’ _jmap._tcp.example.com โ†’ jmap.example.com:443
SystemUdpSrvClient::SRV โ†’ example.com:443
PublicUdpSrvClient(quad9)::SRV โ†’ jmap.example.com:443

๐Ÿง  Summary

Feature Status
DNS-over-HTTPS โœ…
UDP/TCP resolver โœ…
System DNS detection (native) โœ…
Public resolver fallback โœ…
TTL cache โœ…
IPv6 support โœ…
Android native bridge โœ…
iOS native bridge โœ…

๐Ÿชช 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.


pub package Dart