2014-01-09 38 views
0

我在Windows 8中安装了python(x,y)2.7.5.1和dpkt 1.7 win32.exe模块。 我的输入数据集是从CAIDA下载的.pcap文件。我想分析pcap文件以查看数据包的IP和TCP标头,如下所示。如何解析pcap文件的头文件?

Ethernet(src='\x00\x1a\xa0kUf', dst='\x00\x13I\xae\x84,', data=IP(src='\xc0\xa8\n\n', 
off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694, 
off_x2=128, ack=3382015884, win=54, sum=65372, flags=17, dport=80, sport=56145))) 

使用的代码

f = open('test.pcap') pcap = dpkt.pcap.Reader(f) 
for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    print eth 

但是荫越来越像下面只有:不显示IP和TCP报头。是什么原因?如何解析pcap文件的头文件?

Ethernet(src='\x00\x00\xcd\x01k7', dst='E\x00\x00<\xda\xd3', type=10315, data='Y\xacG~\[email protected]\x08\x00\xf8\xb3K\xa4\x05\x00') 

请帮助我尽快..........

回答

1

这是给其内部包含IP的完整以太网报文和TCP数据包。

In [87]: data 
Out[87]: Ethernet(src='\x00\x1a\xa0kUf', dst='\x00\x13I\xae\x84,', data=IP(src='\xc0\xa8\n\n', off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694, off_x2=128, ack=3382015884L, win=54, sum=65372, flags=17, dport=80, sport=56145))) 

你可以从以太网数据包作为

In [88]: data.src 
Out[88]: '\x00\x1a\xa0kUf' 

Access访问的源MAC地址的以太网数据包数据(这是IP PKT内部包含TCP PKT)为

In [89]: data.data 
Out[89]: IP(src='\xc0\xa8\n\n', off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694, off_x2=128, ack=3382015884L, win=54, sum=65372, flags=17, dport=80, sport=56145)) 

访问来源IP为

In [90]: data.data.src 
Out[90]: '\xc0\xa8\n\n' 

次访问TCP数据

In [91]: data.data.data 
Out[91]: TCP(seq=9632694, off_x2=128, ack=3382015884L, win=54, sum=65372, flags=17, dport=80, sport=56145) 

您可以通过修改代码,

使用的代码

f = open('test.pcap') pcap = dpkt.pcap.Reader(f) 
for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    print eth 
    eth.data   # To get IP pkt 
    eth.data.data  # To get TCP pkt 
+0

访问eth.data.data时,因为它没有属性,我收到错误数据。 >>> eth.data 'Y \ xacG〜\ XDE @ \ X08 \ X00 \ XF8 \ xb3K \ XA4 \ X05 \ X00' >>> eth.data.data 回溯(最近最后一次通话) : 文件“”,第1行,在 AttributeError:'str'对象没有'data'属性 – guny

+0

也许它不是TCP pkt,它可能是一个ARP/ICMP pkt,你必须添加适当的TCP检查/ UDP/ARP/ICMP包。 –

+0

在Wireshark中打开输入的CAIDA pcap文件时,它包含TCP和ICMP数据包。我们可以在Wireshark中看到诸如timetolive,flags等标题信息,但是如何通过Python或任何其他可用编程语言使用编程来访问这些数据? [在其他一些类似问题的堆栈溢出中,显示pcap文件没有以太网,因为其第2层协议是属性数据不存在的原因。如果是这样,那么该怎么办? ] – guny