PHPの gethostbyaddr のタイムアウト時間の短縮

20 2月, 2013 (18:16) | php | By: ohishi

gethostbyaddrはIPアドレスからホスト名を取得できる便利な関数だが、
逆引き設定されたDNSがダウンすると、タイムアウト時間まで待ち時間が発生してしまう。

このタイムアウトが結構長くて30秒くらい応答が無い状態が発生して困っていた。

たまたま見かけたサイトにnslookupで代替するやり方があったのでテストしてみて、
なんとか4秒程度まで時間短縮ができたので、メモっておきます。

<?php
//1秒でタイムアウトするgethostbyaddr (実際は4秒程度)
echo gethostbyaddr_timeout1("203.216.243.240")."\n<br>";
echo gethostbyaddr_timeout1(逆引きできないIPアドレス)."\n<br>";

//本物gethostbyaddr (タイムアウトまで30秒程度かかる)
//echo gethostbyaddr("203.216.243.240")."\n<br>";
//echo gethostbyaddr(逆引きできないIPアドレス)."\n<br>";

function gethostbyaddr_timeout1($ip){
$res=`nslookup -timeout=1 -retry=1 $ip`;
  if (preg_match('/name = (.*).\n/', $res, $out)){
    return $out[1];
  } else{
    return $ip;
  }
}
?>

Comments

Comment from かぼ
Time 2014年12月12日 at 06:05

自分のサイトのアクセスログ確認に gethostbyaddr を使っていて、某国からの連続攻撃がある度ログが見れなくなって困っていたのですが、ここに書かれた方法にしたところ、なんとか耐えれるぐらいまで短縮でき大変助かりました。ありがとうございますm(_ _)m

Comment from ohishi
Time 2014年12月12日 at 14:59

かぼさん、コメントありがとうございます。
拾ったコードですが、お役にたてて何よりです(^^)/

Write a comment