Net::DNS::Resolver

DNSクライアントモジュール

use Net::DNS;
パッケージをロードする。
実際の処理は、Net::DNS::Resolver等の派生クラスが行う。必要な派生クラスは全てロードされる。

my $dns = Net::DNS::Resolver->new(
   nameservers => [ '10.1.1.128', '10.1.2.128' ],
   recurse     => 0,
   debug       => 1);
Resolver インスタンスを生成する。

$dns->nameservers(@servers);
検索するネームサーバを設定する。

my $packet = $dns->query($hostname[, $type]);
DNSレコードを検索してNet::DNS::Packetオブジェクトを返す。エラーが発生した場合は、undefが返る。
$type を省略した場合はAレコード。但し、$hostnameにIPアドレスが指定された場合はPTRレコード。

$dns->errorstring;
直前の検索のエラーメッセージを返す。

my @rr = $packet->answer;  (Net::DNS::Packet のメソッド)
直前の検索結果をNet::DNS::RRオブジェクトリストで返す。戻りオブジェクトは1つとは限らない。
例えば、Aレコードを検索する場合、ホスト名がCNAMEだった場合、CNAMEレコードとAレコードのリストが返ってくる。

Net::DNS::RR のメソッド
$rr->print ;    # 検索結果の表示
$rr->string;    # 検索結果
$rr->name;    # ホスト名
$rr->type;     # タイプ
$rr->class;    # class
$rr->ttl;      # TTL(生存時間)
$rr->address;      # IPアドレス
$rr->rdata;    # レコードデータ(バイナリ)
$rr->rdatastr;   # レコードデータ文字列

Net::DNS::RRは、レコードタイプ毎にサブクラスがあり、サブクラスによっては使えないメソッドもある。主なタイプ毎の戻り値は、下記の様になっていた。

type name address rdatastr
A sagami.bko.to 219.117.195.148 219.117.195.148
CNAME sv01.lan.bko.jp 不可 vc10.lan.bko.jp.
MX bko.to 不可 0 mail.bko.to
PTR 254.192.168.192.in-addr.arpa 不可 gw5.lan.bko.jp.