全国都市緑化ぐんまフェア:その1(桜編前半)

鬼嫁シリーズ8:「坊主飽きた」

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

2008年04月09日 10:15

唐突な思い付きネタです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的なものでも作ってみようと思います。

コメント

私も思いつきですが、nslookupは、WindowsもUnix系OSも同じコマンドで、引数も似ているので、system関数で直接OSコマンドを実行するのも有りかと思います。
PerlでもJavaでも同じですが。。。
いかがでしょうか。

>よしきみさん
あーなるほど、その方がシンプルなコードですみそうですね。
ただ、OSコマンドにパラメータを渡すのが結構怖いです。エスケープすりゃいいんだけど。

あと、nslookupの結果をただ表示するだけの機能であればOSコマンドでいいんだけど、
返ってきた値(IPかホスト名)を別の処理に渡す事を考えると、複数行のテキストじゃなくて
StringかArrayで値だけとれた方が便利かなと思って関数使ってます。

その辺の用途を想定したAPIを作ってるので、あとで別のエントリーに書きます。

コメントを投稿

トラックバック

このエントリへのトラックバックURL
http://creazy.net/mt-tb.cgi/553

Categories

Archives

Parts

中の人

スカウター

スカウター : creazy photograph ::: 写真と、WEBと、流行のネタを少々…。yagerは大体ここにいます。
 

feedmeter
あわせて読みたい

フィードメーター - creazy photograph
あわせて読みたい

Yahoo!ログール