Goo*_*Doo 11 networking linux dns bash
我有一个单行命令,可以从 Web 服务器访问日志中列出前 10 个最活跃的 IP 地址:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Run Code Online (Sandbox Code Playgroud)
示例结果集(为简单起见只有 3 个条目)将是:
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Run Code Online (Sandbox Code Playgroud)
如您所见,计数在 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)
Run Code Online (Sandbox Code Playgroud)
如何在不求助于脚本的情况下执行此操作(即坚持使用单行命令)?非常感谢任何建议。
slh*_*hck 16
您可以使用它dig +noall +answer -x <IP>
来查找 IP 地址。
简单地循环包含 IP 地址列表的文件:
while read ip; do dig +noall +answer -x $ip; done < ips.txt
Run Code Online (Sandbox Code Playgroud)
或者,通过管道传输计数命令的输出。这次我们分别获取计数和 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
Run Code Online (Sandbox Code Playgroud)
示例(对不起 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.
Run Code Online (Sandbox Code Playgroud)
您可以进一步将 pipedig
的输出输入 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.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16845 次 |
最近记录: |