如何使用 python dpkt 库计算负载大小

How to calculate payload size by using python dpkt library

我需要处理一个 7GB 的 pcap 文件来提取它们的数据包大小、有效负载大小。我最初使用 scapy 的 PcapReader 来提取这些大小,但是 scapy 运行 对于 7GB 文件来说真的很慢。所以我改为使用 DPKT 库,但是,我不知道如何检查它的 TCP 负载大小。

import dpkt
payload_size=[]
packet_size=[]

for ts,buf in dpkt.pcapng.Reader(open('pcap file','rb')):
    eth=dpkt.ethernet.Ethernet(buf) 
    if eth.type==dpkt.ethernet.ETH_TYPE_IP:
        ip=eth.data
        if ip.p==dpkt.ip.IP_PROTO_TCP:
            packet_size.append(ip.len)
            payload_size.append(?)
    else:
        pass

正在查看 dpkt 的 IP 来源 class

    def __len__(self):
        return self.__hdr_len__ + len(self.opts) + len(self.data)

他们将长度计算为 header、选项和数据长度。所以我认为你可以通过以下方式获得有效负载长度:

payload_size.append(len(ip.data))

更新:

OP 想要 TCP 负载。 TCP的来源类似:

    def __len__(self):
        return self.__hdr_len__ + len(self.opts) + len(self.data)

所以TCP payload的长度应该是len(ip.data.data).

if ip.p==dpkt.ip.IP_PROTO_TCP: 
   tcp = ip.data
   payload_len = len(tcp.data)