Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

PHP 小技集

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

-PHP, 小技集

執筆者:


  1. よしきみ より:

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

  2. yager より:

    >よしきみさん
    あーなるほど、その方がシンプルなコードですみそうですね。
    ただ、OSコマンドにパラメータを渡すのが結構怖いです。エスケープすりゃいいんだけど。
    あと、nslookupの結果をただ表示するだけの機能であればOSコマンドでいいんだけど、
    返ってきた値(IPかホスト名)を別の処理に渡す事を考えると、複数行のテキストじゃなくて
    StringかArrayで値だけとれた方が便利かなと思って関数使ってます。
    その辺の用途を想定したAPIを作ってるので、あとで別のエントリーに書きます。

yager へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。

関連記事

第12回:引用(blockquote)をCSSと画像でそれらしく見せる方法

前回のTipsではブログで頻発する引用作業を簡単にするブックマークレットを紹介しました。 ブログを書く上で頻繁に行う引用の手順を簡単にしてくれるブックマークレットを作ってみようと思う。 via: 第1 …

【更新】ソーシャルメディアに共有するボタンの設置方法(Twitter, facebook, mixi, GREE, Evernote, Google+, Tumblr, Pinterest, はてブ)

ソーシャルメディアの各サービスがこぞって「いいね!」などの共有ボタンをリリースしています。ブログやニュースメディアでも頻繁に目にする昨今ですが、色々なソーシャルボタンの設置方法をまとめて紹介したいと思 …

no image

Delicious画像APIが過負荷で繋がりにくい場合のJavaScriptで対応方法

以前に、ボクが作って公開したDeliciousのブックマーク数を画像で表示するAPIですが、 ・Delicious2.0 の被ブックマーク数画像取得APIを作りました [C!] ありがたい事にものすご …

どれだけMacを開いていたかが丸わかり!?Macでスリープ・解除の履歴を確認するコマンド

どもども、お疲れ気味のヤガー@yagerです。 忙殺されていると、なかなか自分がどのくらい働いているかも分からなくなってくる場合がありますが、月末月初は勤怠報告などで自分の稼働時間を泣きながらまとめて …

FacebookのOGPを簡単に確認するための5つの便利ツール

ご無沙汰しております、ヤガーです。 今までのFacebook関連のネタや、OGPに関する記事を書いてきましたが、さすがに企業サイトやブログなどではOGPの設定が浸透してきていると思います。OGPがある …

スポンサードリンク

スポンサードリンク