2012-03-30 110 views
1

所有,使用tcpdump的上生长的日志文件

我试图调试一个简单的路由器,所有的数据包进入,并送出线路上的tcpdump的可读的日志文件记录。

现在,我正在执行程序,停止它,然后使用tcpdump查看数据包日志。

有没有办法让tcpdump在数据包被添加到日志文件时不断更新自身?即与尾巴如何工作类似?

理想情况下,我想运行gdb中的程序,然后当数据包被recv'd/sent,看到它们弹出一个由tcpdump给出的流。

编辑: 现在我使用tcpdump命令是

$tcpdump -r out.log -e -vvv- x 
+1

也许你应该使用[Wireshark的(http://en.wikipedia.org/wiki/Wireshark)呢? – wallyk 2012-03-30 19:36:24

+0

没有Wireshark。我登录到远程终端并禁用了X-11。 – themaestro 2012-03-30 21:49:03

回答

0

manual page

-r Read packets from file (which was created with the -w option). 
    Standard input is used if file is ``-''. 

所以可以通过管道将文件放入tcpdump

+0

我不太明白我在这里应该做什么。你能举一个正确的命令来运行的例子吗? – themaestro 2012-03-30 21:54:58

+0

进一步思考,也许有一些方法可以让尾部连续打印,尽管事实上pcap文件中没有行返回?然后,您可以运行类似于$ tail -f out.log | tcpdump [options]。我无法弄清楚如何让尾巴写入没有'\ n'字符的东西。 – themaestro 2012-03-30 22:05:38

+0

更简单 - 让程序写入FIFO('mkfifo(1)')并从中读取您的'tcpdump'。 – 2012-03-31 21:08:44

0

编辑:不是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.".. 
... 
+0

不是我真正想要的 - 基本上,我拥有的可执行文件会将数据包写入文件,将其命名为out.log,并且我希望随着更多数据包添加到文件中,tcpdump将读取该文件。 – themaestro 2012-03-30 21:51:55