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

时间:2012-12-31 10:20:56

标签: linux iptables tcpdump

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

172 192.168.1.1
19  192.168.1.56

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

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我相信你可以使用这个: http://www.catonmat.net/blog/traffic-accounting-with-iptables/

你只需稍微编辑awk脚本来打印数据包的数量而不是字节数[并且如果这是关键的话,则打印第二个而不是第一个IP地址]。

答案 1 :(得分:0)

您可以尝试使用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 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并非一直运行,有时计数可能会丢失一些数据包。