nslookupをPHPで実装する簡単なサンプル

唐突な思い付きネタですw

nslookupはDNSにドメイン情報を問い合わせるためのコマンドで、IPアドレスからホスト名を取得したり、ホスト名からIPアドレスを取得したりできる仕組みです。

すでに、Web上でnslookupと同等の結果を得られるサービスはたくさんあるのですが、PHPで実装する際の超簡単なサンプルを作成してみました。

基礎知識

PHPで実装する場合、DNSの問い合わせには下記関数を使用できます。

gethostbyaddr — 指定した IP アドレスに対応するインターネットホスト名を取得する

via: PHP: gethostbyaddr - Manual

gethostbyname — インターネットホスト名に対応するIPアドレスを取得する

via: PHP: gethostbyname - Manual

gethostbynamel — 指定したインターネットホスト名に対応するIPアドレスのリストを取得する

via: PHP: gethostbynamel - Manual

今回は、下記2つの関数を使います。
・正引き(ホスト名→IP):gethostbynamel(複数結果がある場合配列)
・逆引き(IP→ホスト名):gethostbyaddr

サンプルコード

<?php
$search = $_GET["search"];

$list = array();

// null check
if ( empty($search) ) {
	die("no parameter");
}

// IP search mode (XXX.XXX.XXX.XXX)
if ( preg_match("/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/",$search) ) {
	$list[] = gethostbyaddr($search);
	if ( $host == $search ) {
		die("Not found");
	}
}
// Hostname search mode
else {
	if ( !$ips = gethostbynamel($search) ) {
		die("Not found");
	}
	$list = $ips;
}

// output
var_dump($list);

?>

searchパラメータで調べたいIPかホスト名を渡しますが、パラメータがIPだったら(XXX.XXX.XXX.XXXの形式)gethostbyaddrを、それ以外はgethostbynamelを使って検索するように条件分岐しています。

まとめ

今回のサンプルではアウトプットをvar_dumpで省略していますが、この部分をフォーマットして出せば他に使い回せますね。

次回、このコードを使ったAPI的なものでも作ってみようと思います。

同じカテゴリーの記事

このページの一番上に戻る
  • Facebook
  • Twitter
  • Tumblr
  • Instagram
  • miil