我试图调试一个简单的路由器,所有的数据包进入,并送出线路上的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