首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dpkt不生成tcp对象

dpkt不生成tcp对象
EN

Stack Overflow用户
提问于 2015-11-03 02:20:52
回答 1查看 932关注 0票数 0

尝试使用dpkt解析pcap。获得了以下示例代码,但它给出了错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "te.py", line 14, in <module>
    print tcp.sport
AttributeError: 'str' object has no attribute 'sport'

刚刚安装了Ubuntu 14.04 64位,python 2.7.6。使用"pip“安装了模块" dpkt”,但不确定dpkt上的版本是什么。

代码语言:javascript
复制
#examples
#   https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/
#   https://bytes.com/topic/python/answers/944167-dpkt-parsing-pcap-file
import dpkt
import sys

f = open(sys.argv[1])
pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
    tcp = ip.data
    print tcp.sport
f.close()
EN

回答 1

Stack Overflow用户

发布于 2020-05-06 03:37:21

这两个评论是正确的。从无链路层读取的数据包(如TCP或UDP)。因此,在读取数据包中的下一层之前,请检查它是否存在。

这将对您有所帮助:

代码语言:javascript
复制
# Check for TCP or UDP packets
if ip.p == dpkt.ip.IP_PROTO_TCP or ip.p == dpkt.ip.IP_PROTO_UDP:

在您的示例中,它看起来像这样:

代码语言:javascript
复制
import dpkt
import sys

f = open("email1b.pcap")
pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
     
     # Check if there is TCP in packet
     if ip.p == dpkt.ip.IP_PROTO_TCP:
        tcp = ip.data
        print tcp.sport

     else:
        print "there is no TCP in the packet"

f.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33484307

复制
相关文章

相似问题

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