1

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

172 192.168.1.1
19  192.168.1.56

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

我怎样才能做到这一点?

4

2 回答 2

1

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

于 2019-06-28T12:54:32.373 回答
0

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

您只需稍微编辑 awk 脚本即可打印数据包数而不是字节数 [如果这很关键,则打印第二个而不是第一个 IP 地址]。

于 2012-12-31T11:35:02.093 回答