[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:46069] Re: script : remote host resolve



関根なのです。

From: Hiroki Kashiwazaki <reo@xxxxxxxxxxxxxxxxx>
Date: Thu, 2 Mar 2006 08:40:27 +0900

> 例えば、apacheのアクセスログを見ていて特定のパターンのアクセスを
> してくるリモートホストだけを抽出してホスト名を知りたいという事は
> よくあると思います。例えば「今年に入ってから POST メソッドでアク
> セスして来た者」を調べる時に、厳密ではありませんが、僕だと以下の
> ようにやってしまいます
> 
> $ sudo awk '/2006.*POST.*/ {print $1}' /var/log/apache2/access_log | \
> > uniq | sort | sed 's/^/host\ /' | sh | awk '{print $5}'
> 
> で、sort 以降の sed 〜 sh が美しくないなと思うのですが、識者の皆
> 様はここをどのように解決されているのかな、と思った次第です。要す
> るに、awk 〜 uniq 〜 sort で出力された IP アドレス全てに対して、
> host で逆引きをしたいということです。

sed 〜 sh のところは美しくないというより、何か
少しでも間違えるとダメージが大きいのでまずやらないですね。

# script 言語での eval 系は最終手段かと…

で、awk なら

[prompt]$ sudo awk '/2006.*POST.*/ {list[$1]++; }
END {
  for(ip in list) {
    cmd = "host " ip;
    cmd | getline;
    print $5;
    close(cmd);
  }
}' /var/log/apache2/access_log

かな。件数が少ないのが分かってれば for の中身は
  for(ip in list) {
    "host " ip | getline;
    print $5;
  }
にしちゃうかも。