PHPの gethostbyaddr のタイムアウト時間の短縮
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; } } ?>
自分のサイトのアクセスログ確認に gethostbyaddr を使っていて、某国からの連続攻撃がある度ログが見れなくなって困っていたのですが、ここに書かれた方法にしたところ、なんとか耐えれるぐらいまで短縮でき大変助かりました。ありがとうございますm(_ _)m
かぼさん、コメントありがとうございます。
拾ったコードですが、お役にたてて何よりです(^^)/