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 是您要跟踪的端口)。
然后通过您喜欢的任何脚本运行生成的日志,它可以为您做总结。
您可以使用 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。如果您计算服务器本身的连接数,则始终必须使用相反的方法。