Linux 如何计算从特定主机接收的数据包数?

Linux 如何计算从特定主机接收的数据包数?,linux,iptables,tcpdump,Linux,Iptables,Tcpdump,我想检查哪个主机向我的服务器发送的流量最大。我怎样才能得到这样的东西: 172 192.168.1.1 19 192.168.1.56 这意味着在特定的时间间隔内,我的服务从192.168.1.1收到172个数据包,从192.168.1.56收到19个数据包 我怎样才能做到这一点呢?我相信你可以用这个: 您只需稍微编辑一下awk脚本,就可以打印数据包的数量而不是字节的数量[如果这很关键的话,可以第二次而不是第一次打印IP地址] 您可以尝试使用tcpdump: #!/bin/sh whil

我想检查哪个主机向我的服务器发送的流量最大。我怎样才能得到这样的东西:

172 192.168.1.1
19  192.168.1.56
这意味着在特定的时间间隔内,我的服务从
192.168.1.1
收到172个数据包,从
192.168.1.56
收到19个数据包


我怎样才能做到这一点呢?

我相信你可以用这个:


您只需稍微编辑一下awk脚本,就可以打印数据包的数量而不是字节的数量[如果这很关键的话,可以第二次而不是第一次打印IP地址]

您可以尝试使用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
的输出中计算IPv4地址来生成定期统计信息

使用
pcap
过滤器,您可以轻松限制所需的流量。 在示例脚本中,“tcp端口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并非一直在运行,计数有时可能会丢失一些数据包。

要计数的数据包类型是什么?IP或TCP或UDP?@shiplu.mokadd.im我想计算TCP数据包的数量