![tcpdump:仅显示数据部分](https://linux22.com/image/1142541/tcpdump%EF%BC%9A%E4%BB%85%E6%98%BE%E7%A4%BA%E6%95%B0%E6%8D%AE%E9%83%A8%E5%88%86.png)
我正在尝试处理一些 pcap 文件。我的 pcaps 具有用于连接和关闭的标准 tcp 握手,并且在连接打开时发送一个或多个有趣的数据包。
我需要仅提取数据包的数据部分,以便我可以使用十六进制作为另一个程序的输入。我用来tcpreplay
在回送上播放我的 pcap
tcpreplay --intf1=lo some.pcap
使用tcpdump
似乎不起作用
tcpdump -x -i lo
它以十六进制显示数据,例如
0x0000: 4500 003a 0300 0000 4006 79bc 7f00 0001
0x0010: 7f00 0001 a7be 4e20 0000 0002 0000 0002
0x0020: 5018 8000 b9b7 0000 ffff ffff ffff ffff
我真的很想砍掉整个 IP/TCP 报头,只留下
ffff ffff ffff ffff
(在这个例子中,假设这 8 个字节用于协议 F,其中前 3 个字节是 F 的标头,后 5 个字节是 F 的数据。我想在另一个程序中自己处理 F,因此我将把整个 F 称为“数据”。当我使用时,这会产生问题tshark
。)
我不想使用类似strings
或cut
依赖于我自己对 tcp 标头长度的了解的任何工具,因为 1)数据是十六进制的,所以没有好的形式可用strings
或类似的工具;2)一些 tcp 标头有选项,因此长度是可变的,数据的长度也是可变的,所以cut
或类似的工具是不行的。
我也尝试tshark
过
tshark -r some.pcap -Tfields -e data
什么都不显示,
tshark -r some.pcap -x
显示
Frame (72 bytes):
0000 06 05 04 03 02 01 01 02 03 04 05 06 08 00 45 00 ..............E.
0010 00 3a 03 00 00 00 40 06 79 bc 7f 00 00 01 7f 00 .:[email protected].......
0020 00 01 a7 be 4e 20 00 00 00 02 00 00 00 02 50 18 ....N ........P.
0030 80 00 b9 b7 00 00 ff ff ff .........
Application Layer message (5 bytes):
0000 ff ff ff ff ff
因此,wireshark 识别最内层的协议并“有帮助地”为我分割标头和数据...除非我想将标头和数据一起处理。
我完全不知道如何剥离 Ether/IP/TCP 标头并只留下我想要的数据。