2014-01-09 36 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