提取数据包有效载荷长度
Extracting Packet payload length
我通过 Wireshark 捕获了一些 Internet 数据包,现在我只想使用 PYTHON
从数据包的总长度中提取有效负载长度。我可以使用 pkt.length
或 pkt.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 的角度来看,它里面的一切都只是有效载荷。 :)
我通过 Wireshark 捕获了一些 Internet 数据包,现在我只想使用 PYTHON
从数据包的总长度中提取有效负载长度。我可以使用 pkt.length
或 pkt.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 的角度来看,它里面的一切都只是有效载荷。 :)