Bash:活动IP地址的反向DNS查找


11

我有一个单行命令,列出了Web服务器访问日志中最活跃的10个IP地址:

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地址之前,二者之间用空格隔开。实际上在计数之前也有空白,但我无法在此处显示。

我想对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)

如何不借助脚本(即坚持单行命令)来执行此操作?任何建议深表感谢。

Answers:


16

您可以dig +noall +answer -x <IP>用来查找IP地址。

要简单地循环遍历包含IP地址列表的文件,请执行以下操作:

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

或者,通过管道传递计数命令的输出。这次我们分别获得计数和IP地址,然后将它们打印在一行上:

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中获取输出,而我却丢失了计数。所需的输出将是:<count> <IP地址> <反向DNS查找>
GooDoo 2013年

这是很容易更改的,因为while它根据空格分割输入,因此您可以分别读取计数和IP地址。查看我的更新。您可以使用dig的选项来更改输出-我还没有真正使用它。
slhck

谢谢!我进行了一些修改,现在它是我想要的: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

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-
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.