Last 5.3 release ever available: PHP 5.3.29 - 5.3 now EOL

dns_get_record

(PHP 5)

dns_get_recordDen DNS Resource Record für einen gegebenen Hostname finden.

Beschreibung

array dns_get_record ( string $hostname [, int $type = DNS_ANY [, array &$authns [, array &$addtl [, bool &$raw = false ]]]] )

Fragt einen Resource Redcord für den übergeben hostname ab.

Parameter-Liste

hostname

hostname sollte ein valider Hostname wie z.B. "www.example.com". sein. Reverse lookups sind mit der in-addr.arpa möglich, jedoch sollte für diesen Fall gethostbyaddr() genutzt werden.

Hinweis:

Gemäß dem DNS-Standard werden E-Mail Adressen in der Form user.host (zum Beispiel: hostmaster.example.com statt hostmaster@example.com) zurückgegeben. Darum ist es wichtig diesen Wert zu überprüfen und ihn gegebenenfalls mit Funktionen wie z.B. mail() anzupassen.

type

Standardmäßig sucht dns_get_record() nach jedem Resource Record für den hostname. Um die Anfrage zu spezialisieren muss type gegeben sein. Dieser Paramter kann einen der folgenden Werte annehmen: DNS_A, DNS_CNAME, DNS_HINFO, DNS_MX, DNS_NS, DNS_PTR, DNS_SOA, DNS_TXT, DNS_AAAA, DNS_SRV, DNS_NAPTR, DNS_A6, DNS_ALL or DNS_ANY.

Hinweis:

Durch Eigenheiten in der Performance von libresolv auf verschiedenen Plattformen kann es passieren, dass DNS_ANY nicht alle Records zurückgibt. DNS_ALL, auch wenn es langsamer ist, arbeite für diesen Fall zuverlässiger.

authns

Passed by reference. Wird, wenn es übergeben wird, mit den Records für die Autoritativen Nameserver gefüllt.

addtl

Passed by reference. Wird, wenn es übergeben, mit zusätzlichen Records gefüllt.

raw

Im raw Modus wird nur nach dem übergeben Typ gefragt statt durch jeden Typ zu gehen.

Rückgabewerte

Diese Funktion gibt ein Array an assioziativen Arrays zurück Im Fehlerfall wird FALSE zurückgegeben.. Jedes Assoziative Array enthält mindestens die folgenden Keys:

Grundlegende DNS Attribute
Attribut Bedeutung
host Der Host im DNS Namespace auf den sich die restlichen Werte in dem assoziativen Array beziehen..
class dns_get_record() gibt nur Internet class Records zurück wodurch dieser Paramater immer IN zurückgibt.
type String in dem der Record Typ hinterlegt ist. Zusätliche Attribute sind abhängig vom Typ ebenfalls in dem Array enthalten. Siehe untere Tabelle
ttl "Time To Live" die für dieses Record noch verbleibt. . nicht identisch mit der originalen ttl des Records sondern die originale ttl abzüglich der Zeit, die vergangen ist seit der autorative Nameserver die Anfrage erhalten hat.

Andere Keys im assoziativen Array abhängig von 'type'
Type Extra Spalte
A ip: Eine IPv4 Addresse in dotted decimal Notation.
MX pri: Priorität des MX Records. Niedriegere Zahlen bedeuten eine höhere Priorität. target: FQDN des MX Records. Siehe auch: dns_get_mx().
CNAME target: FQDN des Ziels auf das dieses Alias zeigt.
NS target: FQDN des Nameservers, der der autorative Nameserver für dieses Zone ist.
PTR target: Stelle im DNS namespace auf den dieser Record zeigt.
TXT txt: Beliebieger String der diesem Record zugeordnet ist.
HINFO cpu: IANA Nummer für die CPU des Hosts, der durch dieses Record referenziert wird. os: IANA Nummer für das Betriebssystem des Hosts, der durch dieses Record referenziert wird. Siehe IANAs » Operating System Names für die Bedeutung dieses Records.
SOA mname: FQND für den Host von dem dieses Records kommen. rname: E-Mail Adress für den Administrator dieser Domain. serial: Aufsteigende Nummer für die Revision der angefragen Domain. refresh: Aktualisierungsintervall den die sekundären Nameserver nutzen sollten, wenn sie ihre gespiegelten Kopien der Zone aktualisieren wollen. retry: Zeit die nach einem fehlerhaften Versuch gewartet werden soll. expire: Maximale Zeit, die ein sekundärer Nameserver Kopien der Zone behalten soll. Wird nach jedem erfolgreichen Refresh neu gezählt. minimum-ttl: Anzahl der Sekunden, die eine Anfrage im Cache behalten wird. Kann von individuellen Resource Records überschrieben werden resource records.
AAAA ipv6: IPv6 Addresse
A6(PHP >= 5.1.0) masklen: Anzahl der Bits, die von dem durch chain vorgegeben Ziel geerbt werden. ipv6: Adresse mit dem dieser spezielle Record zusammengeführt wird. chain. chain: Übergeordneter Record mit dem ipv6 Daten zusammengeführt werden.
SRV pri: (Priorität) Niedrigere Zahlen bedeuten höhrere Priorität. weight: Gewicht um die Chance jedes targets zu beeinflussen. Bsp: Ziel A: 3, Ziel B: 2. Ziel A wird im Mittel in 60% der Fälle gewählt. target and port: Hostname und Port unter dem der Service erreicht werden kann. Für weitere Information siehe: » RFC 2782
NAPTR order and pref: Gleichweritg zu pri and weight oben. flags, services, regex, und replacement: Parameter wie in » RFC 2915 definiert.

Changelog

Version Beschreibung
5.4.0 raw Parameter hinzugefügt.
5.3.0 Diese Funktion ist jetzt auf Windows Plattformen verfügbar.
5.3.0 Bis zu diesesm Release wurde bei gegebenem authns Parameter auch der addtl Parameter benötigt

Beispiele

Beispiel #1 Benutzung von dns_get_record()

<?php
$result 
dns_get_record("php.net");
print_r($result);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Array
(
    [0] => Array
        (
            [host] => php.net
            [type] => MX
            [pri] => 5
            [target] => pair2.php.net
            [class] => IN
            [ttl] => 6765
        )

    [1] => Array
        (
            [host] => php.net
            [type] => A
            [ip] => 64.246.30.37
            [class] => IN
            [ttl] => 8125
        )

)

Beispiel #2 Benutzung von dns_get_record() und DNS_ANY

Da man häufig auch die IP des Mailservers für einen MX Record benötigt gibt dns_get_record() auch ein Array in addtl in dem die zugehörigen Records zu finden sind. Ebenso wird authns mit einer Liste der autorativen Nameserver zurückgegeben.

<?php
/* Request "ANY" record for php.net,
   and create $authns and $addtl arrays
   containing list of name servers and
   any additional records which go with
   them */
$result dns_get_record("php.net"DNS_ANY$authns$addtl);
echo 
"Result = ";
print_r($result);
echo 
"Auth NS = ";
print_r($authns);
echo 
"Additional = ";
print_r($addtl);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Result = Array
(
    [0] => Array
        (
            [host] => php.net
            [type] => MX
            [pri] => 5
            [target] => pair2.php.net
            [class] => IN
            [ttl] => 6765
        )

    [1] => Array
        (
            [host] => php.net
            [type] => A
            [ip] => 64.246.30.37
            [class] => IN
            [ttl] => 8125
        )

)
Auth NS = Array
(
    [0] => Array
        (
            [host] => php.net
            [type] => NS
            [target] => remote1.easydns.com
            [class] => IN
            [ttl] => 10722
        )

    [1] => Array
        (
            [host] => php.net
            [type] => NS
            [target] => remote2.easydns.com
            [class] => IN
            [ttl] => 10722
        )

    [2] => Array
        (
            [host] => php.net
            [type] => NS
            [target] => ns1.easydns.com
            [class] => IN
            [ttl] => 10722
        )

    [3] => Array
        (
            [host] => php.net
            [type] => NS
            [target] => ns2.easydns.com
            [class] => IN
            [ttl] => 10722
        )

)
Additional = Array
(
    [0] => Array
        (
            [host] => pair2.php.net
            [type] => A
            [ip] => 216.92.131.5
            [class] => IN
            [ttl] => 6766
        )

    [1] => Array
        (
            [host] => remote1.easydns.com
            [type] => A
            [ip] => 64.39.29.212
            [class] => IN
            [ttl] => 100384
        )

    [2] => Array
        (
            [host] => remote2.easydns.com
            [type] => A
            [ip] => 212.100.224.80
            [class] => IN
            [ttl] => 81241
        )

    [3] => Array
        (
            [host] => ns1.easydns.com
            [type] => A
            [ip] => 216.220.40.243
            [class] => IN
            [ttl] => 81241
        )

    [4] => Array
        (
            [host] => ns2.easydns.com
            [type] => A
            [ip] => 216.220.40.244
            [class] => IN
            [ttl] => 81241
        )

)

Anmerkungen

Hinweis:

Für die Kompatibilität auf einigen Betriebsystemem mit Versionen vor PHP 5.3.0 kann die » PEAR Klasse » Net_DNS benutzt werden.

Siehe auch

add a note add a note

User Contributed Notes 4 notes

up
4
PHP Joe
1 year ago
Although this works very well for general DNS queries if you want to do a direct DNS query to a specified DNS server (rather than using OS resolution) try PHPDNS: http://www.purplepixie.org/phpdns/

You can do direct (TCP or UDP) low-level queries to a nameserver and recurse at will. Very useful for testing specific servers and also for walking through a recursive resolution.
up
1
dylan at pow7 dot com
5 years ago
Get more than one type at once like this:
<?php
$dnsr
= dns_get_record('php.net', DNS_A + DNS_NS);
print_r($dnsr);
?>

Using DNS_ALL fails on some domains where DNS_ANY works. I noticed the function getting stuck on the DNS_PTR record, which caused it to return FALSE with this error:
PHP Warning:  dns_get_record(): res_nsend() failed in ....

This gets all records except DNS_PTR:
<?php
$dnsr
= dns_get_record('php.net', DNS_ALL - DNS_PTR);
print_r($dnsr);
?>
up
0
John
5 days ago
A quick'n dirty example for a email service lookup

<?php
$email
= "foo.bar@gmail.com";
$domain = substr(strrchr($email,'@'),1);

foreach ([
"imap","imaps","pop3","pop3s"] as $s) {
   
$record = dns_get_record('_'.$s.'._tcp.'.$domain, DNS_SRV);
    foreach (
$record as $r) {
        if (empty(
$r['target'])) continue;
        echo
$s ." @ ".$r['target'].':'.$r['port'].PHP_EOL;
    }
}
up
-1
karl at influ dot io
1 year ago
There's a comment below from 7 years ago regarding BSD and MacOSX, I'd just like to follow up incase some people see that and don't think it'll work on MacOSX.

Software:

    System Software Overview:

      System Version: OS X 10.8.3 (12D78)
      Kernel Version: Darwin 12.3.0
      Boot Volume: Macintosh HD
      Boot Mode: Normal
      Computer Name: Karl’s iMac
      User Name: Karl Kloppenborg (karl)
      Secure Virtual Memory: Enabled
      Time since boot: 10 days 20:24
--------------

# php -a
php > print_r(dns_get_record('google.com', DNS_MX));

Array
(
    [0] => Array
        (
            [host] => google.com
            [type] => MX
            [pri] => 10
            [target] => aspmx.l.google.com
            [class] => IN
            [ttl] => 749
        )

    [1] => Array
        (
            [host] => google.com
            [type] => MX
            [pri] => 30
            [target] => alt2.aspmx.l.google.com
            [class] => IN
            [ttl] => 749
        )

    [2] => Array
        (
            [host] => google.com
            [type] => MX
            [pri] => 50
            [target] => alt4.aspmx.l.google.com
            [class] => IN
            [ttl] => 749
        )

    [3] => Array
        (
            [host] => google.com
            [type] => MX
            [pri] => 40
            [target] => alt3.aspmx.l.google.com
            [class] => IN
            [ttl] => 749
        )

    [4] => Array
        (
            [host] => google.com
            [type] => MX
            [pri] => 20
            [target] => alt1.aspmx.l.google.com
            [class] => IN
            [ttl] => 749
        )

)
To Top