我想检查哪个主机向我的服务器发送的流量最多。我怎样才能得到这样的东西:
172 192.168.1.1
19 192.168.1.56
这意味着在特定时间间隔内,我的服务器收到了 172 个数据包192.168.1.1
和 19 个数据包192.168.1.56
。
我怎样才能做到这一点?
您可以尝试为此使用 tcpdump:
#!/bin/sh
while [ 1 ]
do
timeout -t 5 tcpdump -n -i eth0 "tcp port 22" 2> /dev/null > /tmp/capture.txt
echo
date
cat /tmp/capture.txt | grep -oE "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.]){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | sort | uniq -c
done
它将通过从tcpdump
.
使用pcap
过滤器,您可以轻松限制所需的流量。在示例脚本"tcp port 22"
中,将流量限制为 SSH。
示例输出:
Fri Jun 28 16:05:10 UTC 2019
53 10.0.0.2
53 10.0.0.99
Fri Jun 28 16:05:16 UTC 2019
37 10.0.0.2
37 10.0.0.99
Fri Jun 28 16:05:21 UTC 2019
Fri Jun 28 16:05:26 UTC 2019
5 10.0.0.2
5 10.0.0.99
由于 tcpdump 并非一直在运行,因此有时可能会丢失一些数据包。
我相信你可以使用这个: http: //www.catonmat.net/blog/traffic-accounting-with-iptables/
您只需稍微编辑 awk 脚本即可打印数据包数而不是字节数 [如果这很关键,则打印第二个而不是第一个 IP 地址]。