[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;
}
にしちゃうかも。