Python 提取数据包有效负载长度

Python 提取数据包有效负载长度,python,wireshark,packet-capture,payload,Python,Wireshark,Packet Capture,Payload,我通过Wireshark捕获了一些Internet数据包,现在我只想使用PYTHON从数据包的总长度中提取有效负载长度。我可以使用pkt.length或pkt.captured\u length获取数据包的完整长度。但是我没有找到任何只提取有效负载大小的命令。有效负载大小必须根据嵌入的协议头和长度计算。例如,IP总长度(很可能是您所看到的“数据包长度”)是整个IP数据报的长度,包括IP报头、嵌入式协议报头和数据。要查找有效负载长度,必须像IP堆栈一样: 通过将第一个字节的低位半字节乘以4来确定

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

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

  • 通过将第一个字节的低位半字节乘以4来确定IP头的长度(可能是20,但它可以有选项)
  • 根据IP报头中第9个字节的值确定嵌入式协议报头
  • 确定嵌入式协议头的头长度;例如,如果这是TCP,则将第十二个字节的高阶半字节乘以4,以确定包含选项的TCP报头的总报头长度
如果将这些值相加,则可以从IP总长度(数据包长度)中减去它们,以确定有效负载长度


当然,从IP的角度来看,您可以从总长度中减去IP头的长度;从IP的角度来看,其内部的所有内容都只是有效负载。:)

包中的内容是否包含更多组件?请查阅传入数据包的协议信息(或复制粘贴一些Wireshark转储)。