尝试使用dpkt来解析pcap。得到以下示例代码,但它给出了错误:
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 64bit,python 2.7.6。已安装的模块&#34; dpkt&#34;使用&#34; pip&#34;,但不确定dpkt上的版本是什么。
#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()
答案 0 :(得分:0)
这两个评论是正确的。从无链接层(例如TCP或UDP)读取的数据包。 因此,在读取数据包中的下一层之前,请检查其是否存在。
这将帮助您:
# Check for TCP or UDP packets
if ip.p == dpkt.ip.IP_PROTO_TCP or ip.p == dpkt.ip.IP_PROTO_UDP:
在您的示例中,它看起来像这样:
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()