Linux

如何通過 IP 找到給定埠和時間段的 TCP 連接總數?

  • June 3, 2019

在 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。如果您計算伺服器本身的連接數,則始終必須使用相反的方法。

引用自:https://serverfault.com/questions/581354