IPをリモートホストに変換するべく,前に作ったAccesslogクラスのipメソッドを書き換えた.
def ip #リモートホスト名を返す
ip = @all[0] #IPアドレス/リモートホスト
begin
#数字.数字.数字.数字という文字列だったら
if /^\d+\.\d+\.\d+\.\d+$/ =~ ip
ip = Resolv.getname(ip).to_s
end
rescue
end
return ip
end
あ,これを使うにあたってresolv.rbをrequireしてますよ.
なぜか,エラーになることがあるので,rescueして――結局,何でエラーになるのか分らないので,何もしていない.......へたれだ.
ipじゃなくてremote hostだよな,完全に名前に偽りありだ.
2004年11月4日追記
正規表現で回数指定の繰り返しを使えるのを知ったので,条件設定を
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ =~ ip
にしてみた.
それから,エラーの対処なんだけど,とりあえず,いったんエラーになったIPは処理しないようにしてみた.
begin
if /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ =~ ip #数字.数字.数字.数字という文字列だったら
#エラーになったことのあるipでなければDNSをひく
ip = Resolv.getname(ip).to_s unless @@error_ip.include?(ip)
end
rescue Resolv::ResolvError, Resolv::ResolvTimeout
@@error_ip << ip #DNSエラーになるipは以後,処理しない
end
他にも,Resolvでタイムアウトになるものの処理も高速化させたいのに,timeoutやらresolv-なんとか(忘れた)など使っていろいろやってみたけど,上手く捕まえられない.
あ,なるとちゃん(@@error_ipのこと)は,外でArray.newしてます.
コメント (1)
DNS逆引きできない物は挙動不振な物も多く,メールアドレス収集ロボットである可能性も高いと気づいた.どうしようか.これだけ表示させてみようか?
投稿者:Sousui (2004年11月14日 15:11)