DNS / DoH / mDNS

March 29, 2026 ยท View on GitHub

duck_net provides DNS resolution functions using system resolvers, DNS-over-HTTPS (DoH), and multicast DNS (mDNS) for local service discovery.

Functions

FunctionParametersReturns
dns_lookup(hostname)VARCHAR (first resolved IP)
dns_lookup_a(hostname)VARCHAR (first IPv4 address)
dns_lookup_aaaa(hostname)VARCHAR (first IPv6 address)
dns_reverse(ip_address)VARCHAR (reverse DNS hostname)
dns_txt(hostname)VARCHAR (TXT records)
dns_mx(hostname)VARCHAR (MX records)
doh_lookup(domain, record_type)VARCHAR (JSON result)
doh_lookup(resolver_url, domain, record_type)VARCHAR (JSON result)
mdns_discover(service_type) with named paramsTable: varies by implementation

Standard DNS

-- Resolve a hostname to an IP
SELECT dns_lookup('example.com');

-- IPv4 only
SELECT dns_lookup_a('example.com');

-- IPv6 only
SELECT dns_lookup_aaaa('example.com');

-- Reverse lookup
SELECT dns_reverse('93.184.216.34');

-- TXT records (SPF, DKIM, etc.)
SELECT dns_txt('example.com');

-- MX records
SELECT dns_mx('example.com');

DNS-over-HTTPS (DoH)

Query DNS records over encrypted HTTPS using public resolvers:

-- Using default resolver (Cloudflare)
SELECT doh_lookup('example.com', 'A');
SELECT doh_lookup('example.com', 'AAAA');
SELECT doh_lookup('example.com', 'MX');

-- Using a custom resolver
SELECT doh_lookup('https://dns.google/dns-query', 'example.com', 'A');

Multicast DNS (mDNS)

Discover services on the local network:

-- Discover HTTP services (default 3-second timeout)
FROM mdns_discover('_http._tcp.local');

-- With custom timeout (milliseconds)
FROM mdns_discover('_ipp._tcp.local', timeout := 5000);

Practical Examples

-- Check if a domain has SPF configured
SELECT dns_txt('example.com') LIKE '%v=spf1%' AS has_spf;

-- Resolve all mail servers for a domain
SELECT dns_mx('gmail.com');

-- Compare system DNS vs DoH results
SELECT
    dns_lookup_a('example.com') AS system_dns,
    doh_lookup('example.com', 'A') AS doh_result;

Security Considerations

  • DNS results used internally (e.g., for SSRF checks) always use system resolution, not DoH.
  • mDNS is limited to local network discovery and enforces recursion depth limits.
  • DoH resolver URLs are validated against SSRF rules.