使用 Scapy 获取原始数据

Getting raw data using Scapy

我正在尝试实现 Wireshark 的 "Follow TCP\UDP Stream" - 使用 scapy。意思是我只想要原始数据,而不是 tcp\udp 数据包的所有其他属性。

当我刚做的时候:

pcap = rdpcap('dummy.pcap')
hexdump(pcap[0])

我得到了整个数据包,即来源、目的地等

假设我收到一个 DNS 请求,如下所示:

0000   52 54 00 12 35 02 08 00  27 78 07 78 08 00 45 00   RT..5...'x.x..E.
0010   00 3E 00 40 00 00 80 11  1E 51 0A 00 02 0F 08 08   .>.@.....Q......
0020   08 08 04 01 00 35 00 2A  41 83 31 1E 01 00 00 01   .....5.*A.1.....
0030   00 00 00 00 00 00 04 74  69 6D 65 07 77 69 6E 64   .......time.wind
0040   6F 77 73 03 63 6F 6D 00  00 01 00 01               ows.com.....

我只想得到:

00000000  31 1e 01 00 00 01 00 00  00 00 00 00 04 74 69 6d 1....... .....tim
00000010  65 07 77 69 6e 64 6f 77  73 03 63 6f 6d 00 00 01 e.window s.com...
00000020  00 01

这应该可以解决问题:

pkt = pcap[0]
hexdump(pkt[DNS])

这会起作用,因为您可以使用任何 Scapy 层来索引给定的数据包,因此要仅获取 Ethernet/IP/UDP/DNS 数据包的 DNS 部分,您只需要 pkt[DNS].