首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python dpkt库计算负载大小

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

Stack Overflow用户
提问于 2020-12-16 14:13:02
回答 1查看 586关注 0票数 0

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 14:27:36

查看dpkt的IP类的源代码

代码语言:javascript
复制
    def __len__(self):
        return self.__hdr_len__ + len(self.opts) + len(self.data)

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

代码语言:javascript
复制
payload_size.append(len(ip.data))

更新:

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

代码语言:javascript
复制
    def __len__(self):
        return self.__hdr_len__ + len(self.opts) + len(self.data)

因此TCP有效负载的长度应该是len(ip.data.data)

代码语言:javascript
复制
if ip.p==dpkt.ip.IP_PROTO_TCP: 
   tcp = ip.data
   payload_len = len(tcp.data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65318165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档