我正在監視某個端口,因為我的應用程式使用該端口,似乎連接會隨機斷開,我想查看連接斷開之前通過的最後一個資料包是什麼:我使用了這一行
sudo tcpdump -XX -i eth0 port 3050 | tail >> tcpamir.txt
但為了讓它工作,我必須啟動另一個終端並發出問題
sudo killall tcpdump
有更好的方法嗎? EDIT1:僅捕獲最後一個資料包很重要,因為我不希望檔案膨脹,因為有足夠的流量來快速填充磁碟空間。
答案1
好吧,我想我找到了解決方案:
sudo tcpdump -XX -i eth0 -w tcpamir-%s.txt -G 10 port 3050
這將每 10 秒將輸出檔案輪換為一個名為tcpamir-<unixtimestamp>.txt
如果您擔心掛起的文件大小,您也可以修改輸出文件,因此它每天都會覆寫自身。欲了解更多信息,請閱讀man 3 strftime
。
我想到類似的東西
sudo tcpdump -XX -i eth0 -w tcpamir-%R.txt -G 86400
其中%R
給出了 24 小時制時間(例如 12:40)。
讀取相關輸出文件
sudo tcpdump -r tcpamir-<unixtimestamp>.txt
第二種解決方案:
將其拆分為更多命令並將其儲存為腳本/函數:
sudo tcpdump -XX -i eth0 port 3050 >> tcptmp.txt
sudo tail -n100 tcptmp.txt >> tcpamir.txt
sudo rm tcptmp.txt
答案2
如果您只想寫入捕獲的所有流量,則只需將 -w 新增至刪除行'|尾 >> tcpamir.txt'
# tcpdump -XX -i eth0 port 3050 -w tcpamir.cap
如果您要在wireshark中分析捕獲,則擴展名必須是.cap當您確保捕獲完成時,您可以使用以下命令殺死它Ctrl + C
注意:-w [filename.cap] 將捕獲寫入文件