PAGE TOP


Whois情報の取得

2017年1月21日PHP

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%成形することは難しそうです。