Start · Sprachen · PHP · Referenz · dns_get_record

dns_get_record

Funktion

Liefert alle DNS-Einträge zu einem Hostnamen als assoziatives Array zurück.

seit PHP 5.0.0 Kategorie: http

Signatur

dns_get_record(string $hostname, int $type = DNS_ANY, array &$authoritative_name_servers = null, array &$additional_records = null, bool $raw = false): array|false

Beschreibung

dns_get_record() führt eine DNS-Abfrage für den angegebenen Hostnamen durch und gibt die gefundenen Einträge als Array von assoziativen Arrays zurück. Über den Parameter $type kann der gewünschte Eintragstyp (z. B. DNS_A, DNS_MX, DNS_TXT) gezielt abgefragt werden. Standardmäßig werden mit DNS_ANY alle verfügbaren Typen abgerufen.

Jeder Eintrag im Rückgabe-Array enthält mindestens die Felder host, class, ttl und type. Je nach Eintragstyp kommen weitere typspezifische Felder hinzu – bei A-Records etwa ip, bei MX-Records pri und target.

Die optionalen Referenz-Parameter $authoritative_name_servers und $additional_records werden mit den autorisierenden Nameservern bzw. zusätzlichen Datensätzen aus der Antwort des DNS-Servers befüllt. Dies ist nützlich, wenn vollständige Informationen über die DNS-Hierarchie benötigt werden.

Die Funktion eignet sich ideal für die Prüfung von Domain-Konfigurationen, E-Mail-Routing-Diagnose oder die Verifikation von TXT-Records (z. B. SPF, DKIM oder Domain-Ownership-Verifikation).

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Der Hostname, für den DNS-Einträge abgefragt werden sollen, z. B. "example.com".
$type int DNS_ANY Bitmaske aus DNS-Typ-Konstanten wie DNS_A, DNS_AAAA, DNS_MX, DNS_TXT, DNS_NS, DNS_SOA, DNS_CNAME, DNS_ALL oder DNS_ANY. Mehrere Typen können mit | kombiniert werden.
$authoritative_name_servers array null Wird bei Übergabe als Referenz mit den autorisierenden Nameservern der Antwort befüllt.
$additional_records array null Wird bei Übergabe als Referenz mit zusätzlichen DNS-Einträgen aus dem Antwort-Abschnitt additional befüllt.
$raw bool false Wenn true, werden unbekannte DNS-Typen als Roh-Daten zurückgegeben. $type wird dann als numerische DNS-Typ-ID interpretiert.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array von assoziativen Arrays zurück, wobei jedes Element einen DNS-Eintrag repräsentiert. Bei einem Fehler oder wenn keine Einträge gefunden werden, wird false zurückgegeben.

Beispiele

A-Records einer Domain abfragen

<?php
$records = dns_get_record('example.com', DNS_A);

if ($records === false) {
    echo "Keine DNS-Einträge gefunden oder Fehler bei der Abfrage.\n";
} else {
    foreach ($records as $record) {
        echo "Host: {$record['host']}, IP: {$record['ip']}, TTL: {$record['ttl']}\n";
    }
}
Host: example.com, IP: 93.184.216.34, TTL: 3600

MX-Records für E-Mail-Routing prüfen

<?php
$records = dns_get_record('example.com', DNS_MX);

if (!empty($records)) {
    // Nach Priorität sortieren
    usort($records, fn($a, $b) => $a['pri'] <=> $b['pri']);

    echo "Mailserver für example.com:\n";
    foreach ($records as $mx) {
        echo "  Priorität {$mx['pri']}: {$mx['target']}\n";
    }
} else {
    echo "Keine MX-Einträge gefunden.\n";
}
Mailserver für example.com: Priorität 10: mail.example.com

TXT-Records inkl. autorisierender Nameserver auslesen

<?php
$authNS = [];
$additional = [];

$records = dns_get_record('example.com', DNS_TXT, $authNS, $additional);

echo "TXT-Einträge:\n";
foreach ($records as $record) {
    echo '  ' . implode(' ', $record['entries']) . "\n";
}

echo "\nAutorisierende Nameserver:\n";
foreach ($authNS as $ns) {
    echo "  {$ns['target']}\n";
}
TXT-Einträge: v=spf1 include:_spf.example.com ~all Autorisierende Nameserver: ns1.example.com ns2.example.com

// Wichtig · Fallstricke

Betriebssystemabhängigkeit: Die Verfügbarkeit und das Verhalten von dns_get_record() hängen vom jeweiligen Betriebssystem und den installierten DNS-Bibliotheken ab. Unter Windows kann die Unterstützung für einige Eintragstypen eingeschränkt sein.

Caching: DNS-Antworten können vom lokalen Resolver oder zwischengelagerten DNS-Servern gecacht werden. Die zurückgegebenen TTL-Werte spiegeln die originalen Werte des DNS-Servers wider, nicht die verbleibende Cache-Zeit.

DNS_ANY vs. DNS_ALL: DNS_ANY fragt den DNS-Server nach beliebigen verfügbaren Einträgen (was der Server zurückgibt, ist nicht garantiert vollständig), während DNS_ALL explizit alle bekannten Typen nacheinander abfragt und damit vollständigere Ergebnisse liefert, aber mehr Netzwerkanfragen verursacht.

Sicherheit: DNS-Antworten können gefälscht sein (DNS-Spoofing). Verwende DNS-Abfragen niemals als alleinige Authentifizierungsgrundlage ohne weitere Sicherheitsmaßnahmen wie DNSSEC.