dns
Die DNS-Erweiterung ermöglicht DNS-Lookups und Reverse-DNS-Lookups aus DuckDB heraus
Maintainer: tobilg
Installation und Laden
INSTALL dns FROM community;LOAD dns;Beispiel
-- Performs a forward DNS lookup to resolve a hostname to its first IPv4 address.D SELECT dns_lookup('google.com') as ip;┌─────────────────┐│ ip ││ varchar │├─────────────────┤│ 142.251.209.142 │└─────────────────┘
-- Performs a DNS lookup to resolve all TXT records for a hostname.D SELECT unnest(dns_lookup_all('google.com', 'TXT')) as txt_record order by txt_record ASC LIMIT 5;┌───────────────────────────────────────────────────────────────────────────────────────────────┐│ txt_record ││ varchar │├───────────────────────────────────────────────────────────────────────────────────────────────┤│ MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB ││ apple-domain-verification=30afIBcvSuDV2PLX ││ cisco-ci-domain-verification=47c38bc8c4b74b7233e9053220c1bbe76bcc1cd33c7acf7acd36cd6a5332004b ││ docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e ││ docusign=1b0a6754-49b1-4db5-8540-d2c12664b289 │└───────────────────────────────────────────────────────────────────────────────────────────────┘
-- Performs a reverse DNS lookup to resolve an IP address to its hostname.D SELECT reverse_dns_lookup('8.8.8.8') as hostname;┌────────────┐│ hostname ││ varchar │├────────────┤│ dns.google │└────────────┘
-- Returns all TXT records for a hostname as a table.D SELECT * FROM corey('lastweekinaws.com') order by txt_record ASC;┌───────────────────────────────────────────────────────────────────────────────┐│ txt_record ││ varchar │├───────────────────────────────────────────────────────────────────────────────┤│ google-site-verification=2cfGboK6oBt4GlzI62WGmKWI_SjoDEKRSaAgmZsQZlo ││ google-site-verification=FRrs1UZEfmPke4kYWmYH0wcOPwcMLM0pphvpyhGCa2w ││ google-site-verification=FuHv5niDbZdqLlXOlvyqokvFJDso9WtDAE3-zHJgz40 ││ google-site-verification=VE5d97aE3ZCw4GzBHIKKeUGKaCYs2evsGq3QCM0t87I ││ v=spf1 include:_spf.google.com include:sendgrid.net include:spf.revue.co ~all │└───────────────────────────────────────────────────────────────────────────────┘
-- Sets the DNS resolver to use for lookups (e.g. 'google' or 'cloudflare').-- Hint: The C-API doesn't currently support using SET commands. The usage of a SELECT is a workaround.D SELECT set_dns_config('google');┌───────────────────────────────────────┐│ set_dns_config('google') ││ varchar │├───────────────────────────────────────┤│ DNS configuration updated to 'google' │└───────────────────────────────────────┘
-- Set concurrency limit to 250 (default: 50)D SELECT set_dns_concurrency_limit(250);┌───────────────────────────────────────┐│ set_dns_concurrency_limit(250) ││ varchar │├───────────────────────────────────────┤│ DNS concurrency limit updated to 250 │└───────────────────────────────────────┘
-- Set DNS cache size to 8192 (default: 1000)D SELECT set_dns_cache_size(8192);┌────────────────────────────────┐│ set_dns_cache_size(8192) ││ varchar │├────────────────────────────────┤│ DNS cache size updated to 8192 │└────────────────────────────────┘Über dns
Diese Community-Erweiterung implementiert DNS-(Reverse-)Lookup-Funktionen für DuckDB.
Funktionen
dns_lookup(hostname, [record_type])
Führt einen Forward-DNS-Lookup aus, um einen Hostnamen auf seine erste IPv4-Adresse oder auf den ersten Record eines angegebenen DNS-Record-Typs aufzulösen.
Parameter:
hostname(VARCHAR): Der aufzulösende Hostnamerecord_type(VARCHAR, optional): Der abzufragende DNS-Record-Typ. Unterstützte Typen:A,AAAA,CNAME,MX,NS,PTR,SOA,SRV,TXT,CAA
Rückgabe: VARCHAR – der erste aufgelöste Record (IPv4-Adresse, wenn kein record_type angegeben ist, oder erster Record des angegebenen Typs), oder NULL bei Fehler
Beispiele:
-- Erste IPv4-Adresse holen (Standardverhalten)SELECT dns_lookup('google.com');-- Gibt zurück: 142.250.181.206 (oder ähnlich)
-- TXT-Record holenSELECT dns_lookup('_dmarc.google.com', 'TXT');-- Gibt zurück: v=DMARC1; p=reject; rua=mailto:[email protected]
-- MX-Record holenSELECT dns_lookup('google.com', 'MX');-- Gibt zurück: 10 smtp.google.com.
-- CNAME-Record holenSELECT dns_lookup('www.github.com', 'CNAME');-- Gibt zurück: github.com.dns_lookup_all(hostname, [record_type])
Führt einen Forward-DNS-Lookup aus, um einen Hostnamen auf alle seine IPv4-Adressen oder auf alle Records eines angegebenen DNS-Record-Typs aufzulösen.
Parameter:
hostname(VARCHAR): The hostname to resolverecord_type(VARCHAR, optional): The DNS record type to query. Supported types:A,AAAA,CNAME,MX,NS,PTR,SOA,SRV,TXT,CAA
Rückgabe: VARCHAR[] – ein Array aller aufgelösten Records (alle IPv4-Adressen, wenn kein record_type angegeben ist, oder alle Records des angegebenen Typs), oder NULL bei Fehler
Beispiele:
-- Alle IPv4-Adressen holen (Standardverhalten)SELECT dns_lookup_all('cloudflare.com');-- Gibt zurück: [104.16.132.229, 104.16.133.229] (oder ähnlich)
-- Alle MX-Records holenSELECT dns_lookup_all('google.com', 'MX');-- Gibt zurück: [10 smtp.google.com.]
-- Alle TXT-Records holenSELECT dns_lookup_all('google.com', 'TXT');-- Gibt zurück: [v=spf1 include:_spf.google.com ~all, google-site-verification=..., ...]
-- Mit unnest einzelne Records erhaltenSELECT unnest(dns_lookup_all('google.com', 'TXT')) as txt_record;reverse_dns_lookup(ip_address)
Führt einen Reverse-DNS-Lookup aus, um eine IPv4-Adresse auf einen Hostnamen aufzulösen.
Parameter:
ip_address(VARCHAR): Die aufzulösende IPv4-Adresse (muss gültiges IPv4-Format sein)
Rückgabe: VARCHAR – der aufgelöste Hostname, oder NULL bei Fehler
Beispiel:
SELECT reverse_dns_lookup('8.8.8.8');-- Gibt zurück: dns.googleset_dns_config(preset)
Aktualisiert die DNS-Resolver-Konfiguration für alle nachfolgenden DNS-Abfragen.
Parameter:
preset(VARCHAR): Das zu verwendende DNS-Resolver-Preset. Unterstützte Presets:'default': Systemeigene Standard-DNS-Server'google': Google Public DNS (8.8.8.8, 8.8.4.4)'cloudflare': Cloudflare DNS (1.1.1.1, 1.0.0.1)'quad9': Quad9 DNS (9.9.9.9, 149.112.112.112)
Rückgabe: VARCHAR – eine Erfolgs- oder Fehlermeldung
Beispiele:
-- Zu Google Public DNS wechselnSELECT set_dns_config('google');-- Gibt zurück: DNS configuration updated to 'google'
-- Zu Cloudflare DNS wechselnSELECT set_dns_config('cloudflare');-- Gibt zurück: DNS configuration updated to 'cloudflare'
-- Alle nachfolgenden Abfragen verwenden die neue KonfigurationSELECT dns_lookup('example.com');
-- Auf Systemstandard zurücksetzenSELECT set_dns_config('default');-- Gibt zurück: DNS configuration updated to 'default'
-- Ungültiges Preset gibt einen Fehler zurückSELECT set_dns_config('invalid');-- Gibt zurück: Unknown preset 'invalid'. Supported: default, google, cloudflare, quad9set_dns_concurrency_limit(limit)
Aktualisiert das Concurrency-Limit für DNS-Lookup-Operationen, um TCP-Verbindungserschöpfung zu verhindern. Dies steuert die maximale Anzahl gleichzeitiger DNS-Anfragen, die über alle DNS-Operationen hinweg gleichzeitig laufen können.
Parameter:
limit(BIGINT): Die maximale Anzahl gleichzeitiger DNS-Anfragen (muss größer als 0 sein)
Rückgabe: VARCHAR – eine Erfolgs- oder Fehlermeldung
Standard: 50 gleichzeitige Anfragen
Beispiele:
-- Concurrency-Limit auf 500 für High-Throughput-Szenarien setzenSELECT set_dns_concurrency_limit(500);-- Gibt zurück: Concurrency limit updated to 500set_dns_cache_size(size)
Aktualisiert die DNS-Cache-Größe für den Resolver. Der Cache speichert DNS-Abfrageergebnisse, um die Performance zu verbessern, indem wiederholte Lookups für dieselben Abfragen vermieden werden. Jeder Cache-Eintrag speichert die Ergebnisse einer eindeutigen DNS-Abfrage (Kombination aus Hostname + Record-Typ).
Parameter:
size(BIGINT): Die maximale Anzahl gecachter DNS-Abfragen (muss größer als 0 sein)
Rückgabe: VARCHAR – eine Erfolgs- oder Fehlermeldung
Standard: 4096 gecachte Abfragen
Beispiele:
-- Cache-Größe auf 8192 für größere Workloads setzenSELECT set_dns_cache_size(8192);-- Gibt zurück: DNS cache size updated to 8192
-- Cache-Größe auf 2048 für kleineren Speicherbedarf setzenSELECT set_dns_cache_size(2048);-- Gibt zurück: DNS cache size updated to 2048corey(hostname) – Tabellenfunktion
Fragt alle TXT-Records eines Hostnamens ab und gibt sie als Tabelle mit einer Zeile pro TXT-Record zurück. Das ist nützlich für erweiterte Filterung, Aggregation und Analyse von TXT-Records.
Schließlich kann Route 53 eine echte Datenbank sein!
Parameter:
hostname(VARCHAR): Der Hostname, für den TXT-Records abgefragt werden
Rückgabe: Eine Tabelle mit einer einzelnen Spalte:
txt_record(VARCHAR): Jeder TXT-Record als eigene Zeile
Beispiele:
-- Alle TXT-Records holen for a domainSELECT * FROM corey('google.com');
-- TXT-Records filternSELECT * FROM corey('google.com')WHERE txt_record LIKE '%spf%';
-- TXT-Records zählenSELECT COUNT(*) as record_countFROM corey('google.com');
-- Mehrere Domains mit UNION ALL abfragenSELECT 'google.com' as domain, * FROM corey('google.com')UNION ALLSELECT 'github.com' as domain, * FROM corey('github.com')UNION ALLSELECT 'cloudflare.com' as domain, * FROM corey('cloudflare.com');
-- Domains mit DMARC-Records findenSELECT '_dmarc.google.com' as domain, * FROM corey('_dmarc.google.com')WHERE txt_record LIKE 'v=DMARC%'UNION ALLSELECT '_dmarc.github.com' as domain, * FROM corey('_dmarc.github.com')WHERE txt_record LIKE 'v=DMARC%';
-- Alternative: dns_lookup_all für dynamische Abfragen mit Spalten verwendenSELECT domain, dns_lookup_all(domain, 'TXT') as txt_recordsFROM (VALUES ('google.com'), ('github.com')) AS domains(domain)WHERE dns_lookup_all(domain, 'TXT') IS NOT NULL;Diese Erweiterung ist experimentell und potenziell instabil. Vollständige Beispiele finden Sie in der README.
Hinzugefügte Funktionen
| function_name | function_type | description | comment | examples |
|---|---|---|---|---|
| dns_lookup | scalar | Performs a forward DNS lookup to resolve a hostname to its first IPv4 address, or to the first record of a specified DNS record type as second parameter. | NULL | [SELECT dns_lookup(‘google.com’);] |
| dns_lookup_all | scalar | Performs a forward DNS lookup to resolve a hostname to all its IPv4 addresses, or to all records of a specified DNS record type second parameter. | NULL | [SELECT dns_lookup_all(‘cloudflare.com’);] |
| reverse_dns_lookup | scalar | Performs a reverse DNS lookup to resolve an IPv4 address given as a parameter to a hostname. | NULL | [SELECT reverse_dns_lookup(‘8.8.8.8’);] |
| set_dns_config | scalar | Updates the DNS resolver configuration for all subsequent DNS queries. | NULL | [SELECT set_dns_config(‘google’);] |
| set_dns_concurrency_limit | scalar | Updates the concurrency limit for DNS lookup operations to prevent TCP connection exhaustion. | NULL | [SELECT set_dns_concurrency_limit(100);] |
| set_dns_cache_size | scalar | Updates the DNS cache size for the resolver. | NULL | [SELECT set_dns_cache_size(8192);] |
| corey | table | Queries all TXT records for a hostname and returns them as a table with one row per TXT record. | NULL | [SELECT * FROM corey(‘lastweekinaws.com’);] |
Überladene Funktionen
Diese Erweiterung fügt keine Funktionsüberladungen hinzu.
Hinzugefügte Typen
Diese Erweiterung fügt keine Typen hinzu.
Hinzugefügte Einstellungen
Diese Erweiterung fügt keine Einstellungen hinzu.