显示网络数据包十六进制转储中每个十六进制字节代表的内容

问题描述 投票:0回答:1

Wirehark Screenshot

如上图所示,在Wireshark中,我们可以点击任意一个十六进制字节,我们就会得到它在Packet Layer数据中代表的是哪一部分。

我正在尝试用 Python 实现相同的效果。我有一个 Pcap 文件及其十六进制转储。我还有一个包含数据包层信息的数组,如下所示:

Array: Packet Layer Information: 
[ { "layer_name" : "eth", "layer_len" : 14, "layer_start" : 0 }, { . . . } ... { . . . } ]

包含我希望与数据包层数据链接的十六进制字节的数组如下所示:

Array: Highlighted Bytes:
[ { "layer" : "ip", "position_in_layer" : 10, "byte" : "e0" }, { } ... { } ]

我试图链接这些十六进制字节并打印出它们在层中代表什么数据,但是,从我所见,层的结构并不总是固定的,并且有很多层和网络协议类型。

我尝试过使用 Pyshark 和 Scapy 等库,但它们没有我正在寻找的功能。在 Scapy 中,我可以将十六进制转储转换为网络数据包,但是,当我打印图层时,它们始终只是 Eth 后跟 Raw。 Eth 之后的层是其有效负载的一部分。

我想找到一种方法,无论是在Python中,还是通过集成其他语言,都能够打印数据包层中的任何字节所代表的内容。

python networking hex wireshark packet
1个回答
0
投票

我从其他来源收到了答案,所以我会提交它,以防其他人需要。

有一个 tshark 命令可以将 pcap 文件转换为 pdml 文件。命令如下:

tshark -r input.pcap -T pdml > output.pdml

在此 pdml 文件中,包含有关 pcap 文件的所有类型的信息,包括有关 hexdump 的信息,以及每个数据包层数据在 hexdump 中代表的内容。

因此,解决方案是执行以下操作:

  1. 读取pcap文件并将其转换为pdml
  2. 读取pdml(xml)文件,并从中收集所需的信息,包括其Hexdumps中数据包层数据的位置
  3. 将收集到的位置与我拥有的十六进制位置进行比较,并获取它所代表的含义。
© www.soinside.com 2019 - 2024. All rights reserved.