Net_DNS_Resolver::query()

Net_DNS_Resolver::query() -- ネームサーバへの問い合わせを行い、結果を受け取る

概要

require_once('Net/DNS.php');

Net_DNS_Packet Net_DNS_Resolver::query (string $hostname [, string $type = 'A' [, string $class = 'IN']])

説明

DNS 問い合わせパケットを作成し、それをシステムで設定されている (例. /etc/resolv.conf)ネームサーバに送ります。 DNS サーバからの応答は、Net_DNS_Packet オブジェクトの形式で 戻されます。

リゾルバオブジェクトは、多くのプロパティを持っています。 その中には、システムのリゾルバ設定から自動的に読み込まれるものもあります。 Linux/UNIX 系のシステムでは、これらの設定は /etc/resolv.conf や環境変数の値から取得されます。設定はオブジェクトのインスタンスが 生成される時点で行われ、その後適切なプロパティをセットすることで 上書き可能です。

ANSWER セクションがリソースレコードを含んでいる場合、この関数は Net_DNS_Packet のみを返します。特に、もし DNS パケットヘッダの ANCOUNT 変数が 0 だった場合、query() は 0 を返します (注:0 です。FALSE ではありません)。ANSWER セクションのうち リソースレコード以外の部分を取得したい場合は、 Net_DNS_Resolver::rawQuery() を利用してください。これは、手動で再帰問い合わせをする際に便利です。

返ってきた RR データオブジェクトの詳細については、 Net_DNS_RR を参照してください。

リゾルバ設定オブジェクトのプロパティ:

環境変数:

次の例は、MX レコードを問い合わせる DNS クエリの例です。 ゾーン内のメールエクスチェンジャの IP アドレスが、回答の中の付加セクションに 含まれていることに注目しましょう。2番目のエクスチェンジャ (これはゾーン内にはありません)の IP アドレスは含まれません。 このアドレスを受け取るには、得られたホスト名に対する A レコードを 改めて問い合わせる必要があります。

次はもう少し複雑な例で、デバッグ情報の表示を有効にしています。 usevc オプションを TRUE に設定していることに注意してください。 これにより、リゾルバに対して UDP ではなく TCP を利用することを強制しています。 このことは、デバッグ出力の中の send_tcp() の行で確認できます。

例 54-3ネームサーバとオプションを指定しての Net_DNS_Resolver::query() の使用

<?php
require_once 'Net/DNS.php';

$resolver = new Net_DNS_Resolver();
$resolver->debug = 1; // デバッグ用出力を有効にする
$resolver->usevc = 1; // UDP の代わりに TCP の使用を強制する
$resolver->nameservers = array(
                           '198.41.0.4',     // ネームサーバに問い合わせる
                           '192.228.79.201'  // IP アドレスを設定する
                           );
$response = $resolver->query('example.com');
if (! $response) {
  echo "\n";
  echo "ANCOUNT が 0 、つまり query() は「失敗しました」\n";
  echo "このパケットを受け取るには、Net_DNS_Resolver::rawQuery() を参照してください\n";
}
?>

出力結果:

;; query(example.com, A, IN)
;; send_tcp(198.41.0.4:53)
;; sending 29 bytes
;; received 517 bytes
;; HEADER SECTION
;; id = 58298
;; qr = 1    opcode = QUERY    aa = 0    tc = 0    rd = 1
;; ra = 0    rcode  = NOERROR
;; qdcount = 1  ancount = 0  nscount = 13  arcount = 15

;; QUESTION SECTION (1 record)
;;
;example.com.   IN      A

;; ANSWER SECTION (0 records)

;; AUTHORITY SECTION (13 records)
com.            172800  IN      NS      A.GTLD-SERVERS.NET.
com.            172800  IN      NS      G.GTLD-SERVERS.NET.
com.            172800  IN      NS      H.GTLD-SERVERS.NET.
com.            172800  IN      NS      C.GTLD-SERVERS.NET.
com.            172800  IN      NS      I.GTLD-SERVERS.NET.
com.            172800  IN      NS      B.GTLD-SERVERS.NET.
com.            172800  IN      NS      D.GTLD-SERVERS.NET.
com.            172800  IN      NS      L.GTLD-SERVERS.NET.
com.            172800  IN      NS      F.GTLD-SERVERS.NET.
com.            172800  IN      NS      J.GTLD-SERVERS.NET.
com.            172800  IN      NS      K.GTLD-SERVERS.NET.
com.            172800  IN      NS      E.GTLD-SERVERS.NET.
com.            172800  IN      NS      M.GTLD-SERVERS.NET.

;; ADDITIONAL SECTION (15 records)
A.GTLD-SERVERS.NET.     172800  IN      AAAA    2001:503:a83e::2:30
A.GTLD-SERVERS.NET.     172800  IN      A       192.5.6.30
G.GTLD-SERVERS.NET.     172800  IN      A       192.42.93.30
H.GTLD-SERVERS.NET.     172800  IN      A       192.54.112.30
C.GTLD-SERVERS.NET.     172800  IN      A       192.26.92.30
I.GTLD-SERVERS.NET.     172800  IN      A       192.43.172.30
B.GTLD-SERVERS.NET.     172800  IN      AAAA    2001:503:231d::2:30
B.GTLD-SERVERS.NET.     172800  IN      A       192.33.14.30
D.GTLD-SERVERS.NET.     172800  IN      A       192.31.80.30
L.GTLD-SERVERS.NET.     172800  IN      A       192.41.162.30
F.GTLD-SERVERS.NET.     172800  IN      A       192.35.51.30
J.GTLD-SERVERS.NET.     172800  IN      A       192.48.79.30
K.GTLD-SERVERS.NET.     172800  IN      A       192.52.178.30
E.GTLD-SERVERS.NET.     172800  IN      A       192.12.94.30
M.GTLD-SERVERS.NET.     172800  IN      A       192.55.83.30

ANCOUNT が 0 、つまり query() は「失敗しました」
このパケットを受け取るには、Net_DNS_Resolver::rawQuery() を参照してください

注意

この関数は、スタティックにコールする ことはできません。