如何使用 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)
我需要处理一个 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)