我試圖調試一個簡單的路由器,所有的數據包進入,並送出線路上的tcpdump的可讀的日誌文件記錄。
現在,我正在執行程序,停止它,然後使用tcpdump查看數據包日誌。
有沒有辦法讓tcpdump在數據包被添加到日誌文件時不斷更新自身?即與尾巴如何工作類似?
理想情況下,我想運行gdb中的程序,然後當數據包被recv'd/sent,看到它們彈出一個由tcpdump給出的流。
編輯: 現在我使用tcpdump命令是
$tcpdump -r out.log -e -vvv- x
我試圖調試一個簡單的路由器,所有的數據包進入,並送出線路上的tcpdump的可讀的日誌文件記錄。
現在,我正在執行程序,停止它,然後使用tcpdump查看數據包日誌。
有沒有辦法讓tcpdump在數據包被添加到日誌文件時不斷更新自身?即與尾巴如何工作類似?
理想情況下,我想運行gdb中的程序,然後當數據包被recv'd/sent,看到它們彈出一個由tcpdump給出的流。
編輯: 現在我使用tcpdump命令是
$tcpdump -r out.log -e -vvv- x
-r Read packets from file (which was created with the -w option).
Standard input is used if file is ``-''.
所以可以通過管道將文件放入tcpdump
。
我不太明白我在這裏應該做什麼。你能舉一個正確的命令來運行的例子嗎? – themaestro 2012-03-30 21:54:58
進一步思考,也許有一些方法可以讓尾部連續打印,儘管事實上pcap文件中沒有行返回?然後,您可以運行類似於$ tail -f out.log | tcpdump [options]。我無法弄清楚如何讓尾巴寫入沒有'\ n'字符的東西。 – themaestro 2012-03-30 22:05:38
更簡單 - 讓程序寫入FIFO('mkfifo(1)')並從中讀取您的'tcpdump'。 – 2012-03-31 21:08:44
編輯:不是100%舒爾如果我把握你想要的東西,但是tee
合適嗎?
即:
須藤tcpdump的 '(UDP和src端口53)' -nnvvXSs 1514 -l |三通dump.log
-l做標準輸出線緩衝
如果你想在C破解的sniffex.c代碼大概可以進行修改,以滿足您的需求。
作爲開始更改filter_exp
以滿足您的需求。
包數是由num_packets
設置,硬編碼到圖10,在使用pcap_loop()
:
INT pcap_loop(pcap_t * P,整數cnt
,pcap_handler回調,u_char *用戶);
cnt
指定返回之前處理的最大數據包數。負值會導致pcap_loop子例程永久循環,或者直到到達EOF或發生錯誤。一個0的處理器處理所有數據包,直到出現錯誤或達到EOF。*
argv[1]
是要使用的設備。
默認輸出通常是:
Packet number 2:
From: 123.123.123.123
To: 10.0.0.10
Protocol: TCP
Src port: 153
Dst port: 53
Payload (1440 bytes):
00000 de 15 be 61 60 47 9a 14 92 b0 5b 7c fa 64 51 4b ...a`G....[|.dQK
00016 b0 b5 c4 4c b0 c2 a8 a3 89 60 10 36 29 7e 10 0c ...L.....`.6)~..
00032 94 15 01 9a a5 29 26 0a a9 a4 82 70 9f 22 ac 90 .....)&....p."..
...
不是我真正想要的 - 基本上,我擁有的可執行文件會將數據包寫入文件,將其命名爲out.log,並且我希望隨着更多數據包添加到文件中,tcpdump將讀取該文件。 – themaestro 2012-03-30 21:51:55
也許你應該使用[Wireshark的(http://en.wikipedia.org/wiki/Wireshark)呢? – wallyk 2012-03-30 19:36:24
沒有Wireshark。我登錄到遠程終端並禁用了X-11。 – themaestro 2012-03-30 21:49:03