如何通过 IP 找到给定端口和时间段的 TCP 连接总数?

Dav*_*gac 6 linux port connection tcp

在 Linux 系统上,有很多方法可以通过连接 IP列出给定端口的当前TCP 连接,但是:如何计算一段时间内每个源 IP 与端口的连接总数?

Jen*_*y D 14

打开 iptables 并将其设置为LOG用于传入连接。示例规则:

 -A INPUT --state NEW -p tcp --dport 4711 -j LOG
Run Code Online (Sandbox Code Playgroud)

(其中 4711 是您要跟踪的端口)。

然后通过您喜欢的任何脚本运行生成的日志,它可以为您做总结。

  • @quadruplebucky 人们在输入命令时偶尔会出错。在这种情况下,询问他们的意思是一件好事,尽管礼貌地完成会更好。 (4认同)

Dan*_*der 7

您可以使用 tcpdump 记录所有 SYN(无 ACK)数据包:

tcpdump "dst port 4711 and tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn"
Run Code Online (Sandbox Code Playgroud)

或记录所有 SYN+ACK 数据包(已建立的连接):

tcpdump "src port 4711 and tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)"
Run Code Online (Sandbox Code Playgroud)

然后将其与 a 结合wc -l以计算所有行

您还需要一种测量固定时间段的方法(您可以让 cron 定期向它发送一个 SIGINT,tcpdump 将计算字节和数据包,但只记录时间)

更新:不用说,查看 tcpdump 的手册页并考虑使用一些选项,例如:(-i只听一个界面)、-p(禁用混杂模式;侵入性较小)或一些输出选项。Tcpdump 需要 root 权限,你的老板可能不喜欢它,因为它是一种黑客工具。另一方面,您不需要触摸系统上的任何东西来运行它(与iptables LOG解决方案相反)

还请注意过滤器中 src/dsk 的小差异。如果您捕获 SYN+ACK 数据包并想计算与服务器的 4711 端口的连接数,则需要 src。如果您正在为相同的结果捕获 SYN+!ACK 数据包,则需要 dst。如果您计算服务器本身的连接数,则始终必须使用相反的方法。