IPアドレスとホスト名を相互変換する

(1/1)
前回の「正規表現で IP アドレスかどうか調べる」の応用として、与えられた文字列が IP アドレスだったらホスト名へ変換、逆に、ホスト名だったら IP アドレスへ変換するプログラムを作ってみることにする。

サンプル・プログラム

サンプル・プログラムの解説

0013: /**
0014:  * IPアドレスかどうか検査する
0015:  * @param string $str チェックするテキスト
0016:  * @return string IPアドレス/FALSE(IPアドレスではない)
0017: */
0018: function is_ipadr($str) {
0019:     $pat = "/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/";
0020:                                                 //IPアドレスを表す正規表現
0021:     preg_match($pat$str$regs);
0022: 
0023:     //定義域チェック (0 ≦ IP ≦ 255)
0024:     for ($i = 1; $i <= 4; $i++) {
0025:         if (!isset($regs[$i]))   return FALSE;
0026:         if ($regs[$i] < 0 || $regs[$i] > 255)   return FALSE;
0027:     }
0028: 
0029:     return $regs[0];
0030: }
0031: 
0032: /**
0033:  * ホスト名どうか検査する
0034:  * @param string $str チェックするテキスト
0035:  * @return string ホスト名/FALSE(ホスト名ではない)
0036: */
0037: function is_host($str) {
0038:     $pat = "/(https?:\/\/)?([\-\_\.\!~\*'\(\)a-zA-Z0-9\;\?\@\&\=\+\$\,%#]+)/";
0039:                                                 //URLを表す正規表現
0040:     if (preg_match($pat$str$regs) != 1)      return FALSE;
0041: 
0042:     return $regs[2];
0043: }

プログラムの流れは、「正規表現で URL をリンクに変換する」および「正規表現で IP アドレスかどうか調べる」とほとんど同じである。

与えられた文字列が IP アドレスか、ホスト名かについては、正規表現によるパターンマッチングで判断する。
IP アドレスだったら、IP アドレス部分を取り出し、関数  gethostbyaddr  によってホスト名に変換する。
ホスト名だったら、ホスト名部分を取り出し、関数  gethostbyname  によって IP アドレスに変換する。
いずれにもマッチしない場合は解析不能としてエラーメッセージを表示する。

さらに whois 検索を行いたいのであれば、pearNet_Whois::query() を利用するといいだろう。

参考サイト

(この項おわり)
header