我正在调试一个Linux嵌入式平台,它有一个接口,普通的以太网帧有一个额外的82-八位的平台头标记在前面。我可以使用tcpdump从这个接口中嗅探,但是tcpdump无法有效地解码,因为以太网头没有从它期望它们的位置开始。因此,我所能看到的就是一个带有-x选项的十六进制转储,但为了方便,我希望tcpdump对它们进行解码。我不感兴趣的内容82-八位组头,但希望看到一个解码的后续封装以太网帧。
是否有一种方法可以告诉tcpdump开始解码从捕获数据包开始的82位字节的以太网头,而不是通常的0位字节?
发布于 2015-06-04 05:25:47
我又碰到了这个问题,忘记了我问过这个问题,但是google把我带回了这里。)
我想出了一个解决办法,如果您碰巧有editcap(来自wireshark)可用的话。不需要修改源代码:
tcpdump -i eth0 -w - | editcap -C 82 - - | tcpdump -r -第一次tcpdump调用捕获数据包并以pcap格式将它们转储到管道中。然后从pcap包流中的每个包的起始处开始编辑82字节。然后,最后的tcpdump调用读取pcap包流并将其作为正常的部分进行剖析。
请注意,管道会导致大量缓冲,因此输出不一定是即时的。tcpdump有面向行缓冲的-l选项,但即使使用stdbuf -i0 -o0,我也无法完全删除缓冲。YMMV
发布于 2014-07-31 23:56:09
除了修改tcpdump源之外。
如果您想这样做,我建议对该设备使用DLT_USERn DLT_/LINKTYPE_ value之一,或者让tcpdump.org为其分配一个正式的值,对libpcap进行黑客攻击以返回这些设备的DLT_值,并通过跳过(或解码)82-八进制平台标头(如果有用的话)对其进行解码。
https://serverfault.com/questions/617066
复制相似问题