Net_DNS_Resolver::axfr() -- ネームサーバからのゾーン転送を行う
説明
axfr() は、Net_DNS_Resolver->nameservers の配列で指定されている
ネームサーバからのゾーン転送を試みます。
Net_DNS_Resolver::axfr() は
Net_DNS_Resolver::query()
メソッドが使っているのと同じリゾルバ設定を利用します。
ほとんどの公開ネームサーバは、標準ではゾーン転送を許可していません。
ゾーン転送は、ゾーンファイル内の DNS リソースレコードの完全なリストを提供します。
ゾーン転送には、UDP の代わりに常に TCP が用いられます。
戻される RR オブジェクトの詳細は
Net_DNS_RR
を参照してください。
例
例 54-1Net_DNS_Resolver::axfr() 問い合わせの失敗例 <?php
require_once 'Net/DNS.php';
$resolver = new Net_DNS_Resolver();
$resolver->debug = 1;
$response = $resolver->axfr('example.com');
print_r($response);
if (count($response) == 0) {
echo "\n";
echo "AXFR 失敗\n";
}
?> |
出力結果:
;; axfr_start(example.com, IN)
;; query(example.com, AXFR, IN)
;; axfr_start(192.168.0.254:53)
;; sending 29 bytes
;; read_tcp: expecting 2 bytes
;; read_tcp: received 2 bytes
;; read_tcp: expecting 29 bytes
;; read_tcp: received 29 bytes
;; received 29bytes
;; HEADER SECTION
;; id = 29190
;; qr = 1 opcode = QUERY aa = 0 tc = 0 rd = 1
;; ra = 1 rcode = NOTAUTH
;; qdcount = 1 ancount = 0 nscount = 0 arcount = 0
;; QUESTION SECTION (1 record)
;;
;example.com. IN AXFR
;; ANSWER SECTION (0 records)
;; AUTHORITY SECTION (0 records)
;; ADDITIONAL SECTION (0 records)
Array
(
)
AXFR 失敗 |
|
次の例では、デバッグ表示が有効になっており、またネームサーバは
ゾーン転送を許可するように設定されています。この例でもっとも注目すべき
箇所は、応答内容の最初と最後にある SOA レコードです。
ネームサーバがゾーン転送を行う際、最初に送られるレコードが SOA
レコードです。ゾーン転送の完了後に、ネームサーバは SOA レコードを
再送します。このことは、デバッグ出力から確認できます。
axfr() の結果として戻される配列には、最後の SOA レコードは含まれません。
例 54-2Net_DNS_Resolver::axfr() 問い合わせの成功例 <?php
require_once 'Net/DNS.php';
$resolver = new Net_DNS_Resolver();
$resolver->debug = 1;
$response = $resolver->axfr('my.example.com');
echo "\n\n以下のリソースレコードがネームサーバから戻されました:\n";
if (count($response)) {
foreach ($response as $rr) {
$rr->display();
}
}
?> |
出力結果:
;; axfr_start(my.example.com, IN)
;; query(my.example.com, AXFR, IN)
;; axfr_start(192.168.0.254:53)
;; sending 32 bytes
;; read_tcp: expecting 2 bytes
;; read_tcp: received 2 bytes
;; read_tcp: expecting 262 bytes
;; read_tcp: received 262 bytes
;; received 262bytes
;; HEADER SECTION
;; id = 21220
;; qr = 1 opcode = QUERY aa = 1 tc = 0 rd = 0
;; ra = 1 rcode = NOERROR
;; qdcount = 1 ancount = 10 nscount = 0 arcount = 0
;; QUESTION SECTION (1 record)
;;
;my.example.com. IN AXFR
;; ANSWER SECTION (10 records)
my.example.com. 300 IN SOA ns1.my.example.com. hostmaster.my.example.com. 103 3600 1800 2592000 300
my.example.com. 300 IN NS ns1.my.example.com.
my.example.com. 300 IN MX 10 mx1.my.example.com.
my.example.com. 300 IN MX 20 mx2.my.example.com.
my.example.com. 300 IN A 192.168.0.1
mx1.my.example.com. 300 IN A 192.168.0.2
mx2.my.example.com. 300 IN A 192.168.0.3
server.my.example.com. 300 IN CNAME www.my.example.com.
www.my.example.com. 300 IN A 192.168.0.1
my.example.com. 300 IN SOA ns1.my.example.com. hostmaster.my.example.com. 103 3600 1800 2592000 300
;; AUTHORITY SECTION (0 records)
;; ADDITIONAL SECTION (0 records)
以下のリソースレコードがネームサーバから戻されました:
my.example.com. 300 IN SOA ns1.my.example.com. hostmaster.my.example.com. 103 3600 1800 2592000 300
my.example.com. 300 IN NS ns1.my.example.com.
my.example.com. 300 IN MX 10 mx1.my.example.com.
my.example.com. 300 IN MX 20 mx2.my.example.com.
my.example.com. 300 IN A 192.168.0.1
mx1.my.example.com. 300 IN A 192.168.0.2
mx2.my.example.com. 300 IN A 192.168.0.3
server.my.example.com. 300 IN CNAME www.my.example.com.
www.my.example.com. 300 IN A 192.168.0.1 |
|
注意
この関数は、スタティックにコールする
ことはできません。