0

我需要处理一个 7GB 的 pcap 文件来提取它们的数据包大小、有效负载大小。我最初使用 scapy 的 PcapReader 来提取这些大小,但是对于 7GB 文件,scapy 运行速度确实很慢。所以我改用 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
4

1 回答 1

0

查看 dpkt 的 IP 类的源码

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

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

payload_size.append(len(ip.data))

更新:

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

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

所以 TCP 有效载荷的长度应该是len(ip.data.data).

if ip.p==dpkt.ip.IP_PROTO_TCP: 
   tcp = ip.data
   payload_len = len(tcp.data)
于 2020-12-16T06:27:35.503 回答