提取数据包有效载荷长度

Extracting Packet payload length

我通过 Wireshark 捕获了一些 Internet 数据包,现在我只想使用 PYTHON 从数据包的总长度中提取有效负载长度。我可以使用 pkt.lengthpkt.captured_length 获取数据包的完整长度。但是我没有找到任何只提取有效负载大小的命令。

有效负载大小必须根据嵌入式协议 header 和长度计算。例如,IP 总长度(很可能是您看到的 "packet length")是整个 IP 数据报的长度,包括 IP header、嵌入式协议 header 和数据。要找到您必须的有效负载长度,就像 IP 堆栈一样:

  • 通过将第一个字节的低位半字节乘以 4 来确定 IP 的长度 header(可能是 20,但它可以有选项)。
  • 根据IP中第9字节的值header
  • 判断内嵌协议header
  • 确定嵌入式协议的header长度header;例如,如果这是 TCP,则将第十二个字节的高位半字节乘以 4 以确定 TCP header 的总 header 长度,包括选项。

如果将这些值相加,则可以从 IP 总长度(数据包长度)中减去它们来确定负载长度。

当然,从IP的角度,你可以直接从总长度中减去IP的长度header;从 IP 的角度来看,它里面的一切都只是有效载荷。 :)