Apacheアクセスログと私(IP→リモートホスト変換)

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してます.

日時: 2004年10月31日 | PC/Web > Ruby |

コメント (1)

DNS逆引きできない物は挙動不振な物も多く,メールアドレス収集ロボットである可能性も高いと気づいた.どうしようか.これだけ表示させてみようか?

コメントを投稿

(空欄でもかまいません)

(メールアドレスは管理人に通知されますが,Web上には表示されません)

Powered by Movable Type