Whois情報の取得
Pearライブラリで取得するwhois情報メモ
既存のwhoisサーバー情報取得サービスを再現してみたくなりました。検索してみると、それなりに便利なライブラリがあるようです。ライブラリ利用では、値を投げれば欲しい値が帰ってくるので、ほぼ勉強にはなりませんが、中身をみて参考になることは多いです。
以下のパッケージをダウンロード
Package Information: Net_Whois:
http://pear.php.net/package/Net_Whois
必要なファイル:Whois.php
Package Information: Net_Socket:
https://pear.php.net/package/Net_Socket/download/
必要なファイル:Socket.php
設置に関しては、下記のようにindexページで、whois.phpを読みこんで、ライブラリ関数を利用する。Socket.phpに関しては、whois.phpの仕様上、Netディレクトリの下の階層に置く必要がある。
任意ディレクトリ
+ index.php
+ whois.php
+ Net/Socket.php
get_whois()
get_whois()の引数にドメインとwhoisサーバー名を代入して、whois情報の取得が可能。
//index.php require_once "Whois.php"; $d ="sample.com"; //ドメイン $s ="whois.verisign-grs.com"; //comの場合 (探索するドメインのwhoisサーバー) $data = get_whois($d, $s);
$serverに入るwhoisサーバーに関しては、毎回ドメインに対応したwhoisサーバー名を代入するのは現実的ではないので、このあたりは自分でWhoisサーバーリストを配列化するか、配布しているもの、又はAPIでもあるのならそれを利用するようにする。公開されているものでも、全網羅されていなかったり、正確とは限らないです。なにしろ数が多いので、すべて網羅するのは現実的には厳しいですし、whoisサーバー名が変更されることもあるので、万能なものにするのは難しそうです。
既存のwhois情報取得サービスは、リスト化したwhois情報を作っているとおもわれますが、精度はさまざまで、例えば、新たにドメインが加わった場合は、追加していく必要がありますので、.redや.blueに対応していなかったりします。
今回 whois情報のリストとして、list.phpをつくり、配列にキーと値で格納するwhois情報専用の変数を容易することで、対応しました。ただ、良く考えると、例えば、netの場合、netuk.net 同一のTLDをもつものがあるので、それらを考慮して、書く必要があるのです。下記は後方一致で、特定しています。
//list.php $list = array( 'aero' => 'whois.aero', 'arpa' => 'whois.iana.org', 'asia' => 'whois.nic.asia', 'biz' => 'whois.biz', 'cat' => 'whois.cat', 'com' => 'whois.verisign-grs.com', 'coop' => 'whois.nic.coop', 'edu' => 'whois.educause.edu', 'gov' => 'whois.dotgov.gov', //・・・・・・・続く 省略 );
//index.php require_once "Whois.php"; require_once "list.php"; $d ="sample.com"; //ドメイン foreach($list as $k => $v){ if(preg_match('/' .$k. '$/', $d)){ $w[] = array($k, $v); } } if( count($w) === 2 ){ $s = $w[1][1]; }else{ $s = $w[0][1]; } $data = get_whois($d, $s);
課題としては、取得したデータは、配列形式にまとまっているわけではなく、決まった規則に沿って出力された形式ではないことです。
すべて列挙されて返ってくるので、改行やコロンごとに分割で対応できるかと思われますが、結構、返り値のパターンがいろいろありすぎて、こちらも100%成形することは難しそうです。