監控特定連接埠上的 TCP 流量

監控特定連接埠上的 TCP 流量

我已經對此進行了相當廣泛的搜索,但似乎無法想出一個可行的範例。

我的目標是監視特定連接埠上的 TCP 流量以查看傳入連線並將其寫入文字檔案。問題是我還需要每行都有一個時間戳,以準確顯示客戶端連接到第二行的時間。

我已經用盡了 netstat、nmap 和 tcptrack,但都不支援時間戳記。

我在想,如果我監視特定的本地端口並在建立連接時將文本寫入文件,然後只需連接每行上的日期,Linux shell 腳本可能會起作用。

我正在玩這個:

netstat -ano|grep 443|grep ESTABLISHED

還有這個:

tcptrack -i eth0 port 443

但這都不適合我的需要,因為我需要連結進來的時間。

如果您有任何建議或可以為我指出正確的方向,我將不勝感激。

謝謝。 :)

答案1

編輯: 幾年後我仍然獲得支持。請不要尋求這個答案,回答使用iptables在我看來,這裡優越得多。


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

或僅tcp-syn,或僅tcp-ack(我的猜測是那個),取決於您的需要。

答案2

為此,您可以使用 Linux 核心中的 iptables 支援。好處是它不需要任何額外的軟體就可以發揮一定的作用。缺點是它需要 root 權限才能設定(但考慮到您正在談論端口 443,這是一個特權端口,大多數解決方案可能需要 root 權限)。

新增 iptables 規則,如下所示:

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(調整-I INPUT部分以適合您的口味。)

當規則被觸發時,核心將發出一個系統日誌條目。例如,對於輸入規則,日誌條目可能類似於:

12 月5 日09:10:56 主機名稱核心:[1023963.185332] HTTPS SYN:IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80: 08:00 SRC=ABCD DST=WXYZ LEN=52 TOS=0x00 PREC=0x20 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=

然後,您可以使用任何普通的日誌監視工具來利用此資訊執行一些有用的操作。如果您的系統日誌實作支援它,您甚至可以將它們定向到單獨的日誌檔案中,從而有效地滿足將連接資料寫入時間戳記為秒的檔案的要求,而無需其他軟體。

請注意,LOG目標是非終止目標,這意味著仍將評估其後面的任何規則,並且 LOG 規則本身不會拒絕或接受資料包。這使得LOG目標對於調試防火牆規則也很有用。

為了避免日誌氾濫,請考慮將此limit模組與此結合使用。有關詳細信息,請參閱 iptables(8) 手冊頁。

答案3

微秒分辨率

預設情況下,tcp轉儲實用程式將以微秒分辨率報告時間。例如:

$ sudo tcpdump -i any port 443

將顯示類似以下內容的輸出:

12:08:14.028945 IP localhost.33255 > localhost.https:標誌[S],seq 1828376761,win 43690,選項[mss 65495,sackOK,TS val 108010971 長度
esc 14.028959 IP localhost.https > localhost.33255:標誌[R.],seq 0,ack 1828376762,win 0,長度0

有關 tcpdump 選項的完整列表,請參閱 tcpdump(8);有關可使用的過濾器的完整語法,請參閱 pcap-filter(7)。

答案4

您可能還需要它來監視來自其他電腦的傳入和傳出資料包。

tcpflow -i eth0 -c port 7891

-i提及網路的選項,-c在控制台中列印資料包的選項)

相關內容