std.net.dns

DNS (Domain Name System) übersetzt Hostnamen in IP-Adressen und umgekehrt. Die Unit implementiert einen vollständigen DNS-Resolver über UDP mit Unterstützung für alle gängigen Record-Typen: A, AAAA, MX, NS, CNAME, TXT, PTR, SOA, SRV, CAA, DNSKEY und DS. Auflösungen können gegen den System-Resolver, Google Public DNS (8.8.8.8) oder Cloudflare DNS (1.1.1.1) gerichtet werden.

Einsatzbereiche sind Domainvalidierung, Mail-Routing (MX-Lookup), Infrastruktur-Abfragen, DNSSEC-Analysen und alle Anwendungen, die Hostnamen selbst auflösen müssen ohne auf libc-Resolver zu setzen.

import std.net.dns;

var result: DNSResult := DNSResolve("example.com");
if (DNSResultIsSuccess(result)) {
    DNSPrintIP(DNSResultGetIPv4(result));
}


Imports

  • std.net.socket
  • std.net.types

Konstanten

Name Typ Wert Sichtbarkeit
DNS_QR_QUERY int64 0 pub
DNS_QR_RESPONSE int64 1 pub
DNS_OPCODE_QUERY int64 0 pub
DNS_RD int64 1 pub
DNS_RA int64 1 pub
DNS_TYPE_A int64 1 pub
DNS_TYPE_AAAA int64 28 pub
DNS_TYPE_CNAME int64 5 pub
DNS_TYPE_MX int64 15 pub
DNS_TYPE_TXT int64 16 pub
DNS_TYPE_NS int64 2 pub
DNS_TYPE_SOA int64 6 pub
DNS_TYPE_PTR int64 12 pub
DNS_TYPE_SRV int64 33 pub
DNS_TYPE_CAA int64 257 pub
DNS_TYPE_DS int64 43 pub
DNS_TYPE_DNSKEY int64 48 pub
DNS_TYPE_ANY int64 255 pub
DNS_CLASS_IN int64 1 pub
DNS_RCODE_OK int64 0 pub
DNS_RCODE_FORMERR int64 1 pub
DNS_RCODE_SERVFAIL int64 2 pub
DNS_RCODE_NXDOMAIN int64 3 pub
DNS_RCODE_NOTIMP int64 4 pub
DNS_RCODE_REFUSED int64 5 pub
DNS_PORT int64 53 pub

Typen

DNSResult (struct)

Feld Typ
success bool
recordType int64
ttl int64
rcode int64
dataLen int64

Funktionen

Signatur Sichtbarkeit Beschreibung
dns_random_id(): int64 priv Zufällige DNS-Transaktions-ID generieren
dns_encode_name(buf: int64, offset: int64, name: int64, nameLen: int64): int64 priv Hostnamen ins DNS-Wire-Format kodieren
dns_build_query(buf: int64, name: int64, nameLen: int64, queryType: int64): int64 priv Vollständiges DNS-Abfragepaket aufbauen
dns_skip_name(buf: int64, offset: int64, maxLen: int64): int64 priv DNS-Namen im Antwortpuffer überspringen
dns_parse_response_ex(buf: int64, bufLen: int64, resultPtr: int64, queryType: int64): bool priv DNS-Antwortpaket vollständig parsen
DNSResolve(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub IPv4-Adresse eines Hostnamens auflösen
DNSResolveEx(hostname: int64, hostnameLen: int64, dnsServerIP: int64, queryType: int64, resultPtr: int64): bool pub DNS-Abfrage für beliebigen Record-Typ
DNSResolveAAAA(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub IPv6-Adresse eines Hostnamens auflösen
DNSResolveAAAAGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub AAAA-Abfrage über Google DNS
DNSResolveAAAACoudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub AAAA-Abfrage über Cloudflare DNS
DNSResolveCNAME(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub CNAME-Record eines Hostnamens auflösen
DNSResolveCNAMEGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub CNAME-Abfrage über Google DNS
DNSResolveCNAMECloudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub CNAME-Abfrage über Cloudflare DNS
DNSResolveMX(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub MX-Record einer Domain auflösen
DNSResolveMXGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub MX-Abfrage über Google DNS
DNSResolveMXCloudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub MX-Abfrage über Cloudflare DNS
DNSResolveNS(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub NS-Record einer Domain auflösen
DNSResolveNSGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub NS-Abfrage über Google DNS
DNSResolveNSCloudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub NS-Abfrage über Cloudflare DNS
DNSResolveTXT(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub TXT-Record einer Domain auflösen
DNSResolveTXTGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub TXT-Abfrage über Google DNS
DNSResolveTXTCloudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub TXT-Abfrage über Cloudflare DNS
DNSResolveSOA(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub SOA-Record einer Domain auflösen
DNSResolveSOAGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub SOA-Abfrage über Google DNS
DNSResolveSOACloudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub SOA-Abfrage über Cloudflare DNS
DNSResolvePTR(ip: int64, dnsServerIP: int64, resultPtr: int64): bool pub Reverse-DNS-Lookup für IP-Adresse
DNSResolvePTRGoogle(ip: int64, resultPtr: int64): bool pub PTR-Abfrage über Google DNS
DNSResolveSRV(service: int64, serviceLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub SRV-Record eines Dienstes auflösen
DNSResolveSRVGoogle(service: int64, serviceLen: int64, resultPtr: int64): bool pub SRV-Abfrage über Google DNS
DNSResolveSRVCloudflare(service: int64, serviceLen: int64, resultPtr: int64): bool pub SRV-Abfrage über Cloudflare DNS
DNSResolveCAA(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub CAA-Record einer Domain auflösen
DNSResolveCAAGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub CAA-Abfrage über Google DNS
DNSResolveDS(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub DNSSEC DS-Record auflösen
DNSResolveDSGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub DS-Abfrage über Google DNS
DNSResolveDNSKEY(hostname: int64, hostnameLen: int64, dnsServerIP: int64, resultPtr: int64): bool pub DNSKEY-Record einer Domain auflösen
DNSResolveDNSKEYGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub DNSKEY-Abfrage über Google DNS
DNSResolveGoogle(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub A-Record über Google Public DNS auflösen
DNSResolveCloudflare(hostname: int64, hostnameLen: int64, resultPtr: int64): bool pub A-Record über Cloudflare DNS auflösen
hostnameLen(hostname: int64): int64 priv Länge eines Hostnamen-Strings ermitteln
GetHostByName(hostname: int64): int64 pub IP-Adresse als int64 zurückgeben
ResolveHost(hostname: int64): IPAddr pub Hostname zu IPAddr-Struktur auflösen
DNSPrintIP(ip: int64) pub IPv4-Adresse als Text ausgeben
DNSPrintIPV6(data: int64) pub IPv6-Adresse als Text ausgeben
DNSResultGetIPv4(resultPtr: int64): int64 pub IPv4-Adresse aus DNS-Ergebnis lesen
DNSResultGetTTL(resultPtr: int64): int64 pub TTL-Wert aus DNS-Ergebnis lesen
DNSResultGetType(resultPtr: int64): int64 pub Record-Typ aus DNS-Ergebnis lesen
DNSResultIsSuccess(resultPtr: int64): bool pub Erfolg einer DNS-Abfrage prüfen