Linux
如何通過 IP 找到給定埠和時間段的 TCP 連接總數?
在 Linux 系統上,有很多方法可以通過連接 IP 列出給定埠的*目前TCP 連接,但是:*如何計算一段時間內每個源 IP 到埠的連接總數?
打開 iptables 並將其設置為
LOG
用於傳入連接。範例規則:-A INPUT --state NEW -p tcp --dport 4711 -j LOG
(其中 4711 是您要跟踪的埠)。
然後通過你喜歡的任何腳本執行生成的日誌,它可以為你做總結。
您可以使用 tcpdump 記錄所有 SYN(無 ACK)數據包:
tcpdump "dst port 4711 and tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn"
或記錄所有 SYN+ACK 數據包(已建立的連接):
tcpdump "src port 4711 and tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)"
然後將它與 a 結合起來
wc -l
計算所有行您還需要一種測量固定時間段的方法(您可以讓 cron 定期向它發送一個 SIGINT,tcpdump 將計算字節和數據包,但只記錄時間)
更新:沒必要說,看看 tcpdump 的手冊頁並考慮使用一些選項,如:(
-i
只聽一個介面)、-p
(禁用混雜模式;侵入性較小)或一些輸出選項。Tcpdump 需要 root 權限,你的老闆可能不喜歡它,因為它是一種黑客工具。另一方面,您不需要觸摸系統上的任何東西來執行它(與iptables LOG
解決方案相反)還請注意過濾器中的小 src/dsk 差異。如果您擷取 SYN+ACK 數據包並想計算到埠 4711 的伺服器連接數,則需要 src.src。如果您要擷取 SYN+!ACK 數據包以獲得相同的結果,則需要 dst。如果您計算伺服器本身的連接數,則始終必須使用相反的方法。