Bash:アクティブIPアドレスのDNS逆引き参照


10

Webサーバーアクセスログから最もアクティブな上位10個のIPアドレスを一覧表示する1行のコマンドがあります。

cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10

サンプルの結果セット(簡単にするために3つのエントリのみ)は次のようになります。

20 12.34.56.7
22 3.67.89.201
29 9.0.203.255

ご覧のように、カウントはIPアドレスの前にあり、2つは空白で区切られています。カウントの前にも実際には空白スペースがありますが、ここに表示することはできません。

次のようになるように、IPアドレスの逆DNSルックアップを行うのが好きです。

20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)

スクリプトに頼らずに(つまり、1行のコマンドを使用せずに)これを行うにはどうすればよいですか?アドバイスは大歓迎です。

回答:


15

を使用dig +noall +answer -x <IP>して、IPアドレスを検索できます。

IPアドレスのリストを含むファイルを単純にループするには:

while read ip; do dig +noall +answer -x $ip; done < ips.txt

または、カウントコマンドの出力をパイプします。今回は、カウントとIPアドレスを別々に取得して、1行に出力します。

cat access.log | awk '{print $1}' | sort | 
uniq -c | sort -n | tail -n10 |
while read count ip; do printf "%d " $count; printf "%s " $ip; dig +noall +answer -x $ip; done

例(UUOCで申し訳ありません):

cat test | while read count ip; do printf "%d " $count; printf "%s " $ip; dig +noall +answer -x $ip; done
20 8.8.8.8 8.8.8.8.in-addr.arpa.    52767   IN  PTR google-public-dns-a.google.com.
22 8.8.4.4 4.4.8.8.in-addr.arpa.    61369   IN  PTR google-public-dns-b.google.com.

さらにパイプdigの出力をawkにパイプして、ホスト名を取得できます。

cat test | while read count ip; do printf "%d " $count; printf "%s " $ip; echo $(dig +noall +answer -x $ip | awk '{ print $(NF) }'); done
20 8.8.8.8 google-public-dns-a.google.com.
22 8.8.4.4 google-public-dns-b.google.com.

迅速な対応ありがとうございます!ただし、今回はdigからの出力のみを取得し、カウントを失いました。必要な出力は次のようになります:<カウント> <IPアドレス> <逆DNSルックアップ>
GooDoo

while入力を空白に基づいて分割するため、変更は非常に簡単です。カウントとIPアドレスを個別に読み取ることができます。私のアップデートを見てください。digのオプションを使用して出力を変更できます。実際には使用していません。
slhck 2013

ありがとう!私はいくつかの変更を加えましたが、今それが私が探しているものです:cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | sed "s/^[ \t]*//" | tail -n10 | while read count ip ; do echo "$count " "$ip" "( $(dig +noall +answer -x $ip | awk '{ print $(NF) }') )"; done親切な助けに感謝します!
GooDoo 2013

for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt

+1ですが、xargs( " cat file | xargs -n1 dig +noall +answer -x
xargs-
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.