使用dpkt解析pcap文件

时间:2016-06-17 02:23:46

标签: python python-2.7 networking pcap dpkt

我正在做一个我必须通过pcap文件解析的任务,我正在使用dpkt这样做。我是网络新手,所以我很难调试代码/入门。

第一组代码:

import dpkt

filename='test.pcap'
f = open(filename)
pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
    eth = dpkt.ethernet.Ethernet(buf)
    ip = eth.data
    tcp = ip.data

f.close()

错误是AttributeError:'str'对象没有属性'data'

所以从之前的Stackoverflow中我发现可能我应该“跳过dpkt以太网解码并直接跳转到IP解码”,所以我改变了代码并转到:

import dpkt

filename='test.pcap'

f = open(filename)
pcap = dpkt.pcap.Reader(f)

for ts,buf in pcap:
    ip = dpkt.ip.IP(buf)
    tcp = ip.data

f.close()

它现在给我的错误是“UnpackError:无效的标题长度”

不明白如何向前推进,任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

我对手机上的痕迹也有同样的问题。

这是因为以太网被Linux Cooked Capture取代。如果您的跟踪封装类似,则必须使用dpkt.sll.SLL(buff)而不是dpkt.ethernet.Ethernet(buf)。这是一个例子:

import dpkt

filename='a_linux_cooked_capture.pcap'
f = open(filename, 'rb')
pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
    eth = dpkt.sll.SLL(buf)
    ip = eth.data
    tcp = ip.data
f.close()

答案 1 :(得分:1)

这通常发生在Windows上。在Windows上,您应该以二进制模式打开pcap文件:

  

f = open('test.pcap','rb')