2017-03-22 421 views
2

我有大約10GB的pcap數據和IPv6流量來分析存儲在IPv6報頭和其他擴展報頭中的信息。爲此,我決定使用Scapy框架。我試過rdpcap函數,但對於這樣的大文件,它不推薦。它試圖將所有文件加載到內存中,並陷入我的情況。 我,在這種情況下嗅建議的網發現,我的代碼如下所示:使用scapy讀取PCAP文件

def main(): 
    sniff(offline='traffic.pcap', prn=my_method,store=0) 


def my_method(packet): 
    packet.show() 

在函數調用my_method我單獨收到的每個數據包,我可以解析它們,但.... 當我打電話顯示函數是在建造框架方法我得做這樣的: result

當打開Wireshark的我得到了妥善找包: result2

你能告訴我如何解析在Scapy的這個包來獲得正確的結果?

編輯: 根據評論中的討論,我找到了一種用Python解析PCAP文件的方法。在我看來,easies方法是使用pyshark框架:

import pyshark 
pcap = pyshark.FileCapture(pcap_path) ### for reading PCAP file 

它可以輕鬆地重複讀取文件與循環

for pkt in pcap: 
    #do what you want 

對解析IPv6報頭下面的方法可能是有用的:

pkt['ipv6'].tclass   #Traffic class field 
pkt['ipv6'].tclass_dscp  #Traffic class DSCP field 
pkt['ipv6'].tclass_ecn  #Traffic class ECN field 
pkt['ipv6'].flow    #Flow label field 
pkt['ipv6'].plen    #Payload length field 
pkt['ipv6'].nxt    #Next header field 
pkt['ipv6'].hlim    #Hop limit field 
+0

@coder據我所知,Wireshark的顯示不同的方式分組,我好接着就,隨即。但看看src ip地址以及scapy如何解析它 - 據我所知它不是okey,但也許我是不正確的。 – Krystian

+0

哦,是的,你是對的 - 我錯過了** ipv6 **部分。 – coder

+0

我在scapy github頁面上打開了bug問題(https://github.com/secdev/scapy/issues/579)。 @coder你提到使用wireshark會更有效率。我的目標是獲取標題的每個值並做一些統計工作 - wireshark能夠執行此類活動嗎? – Krystian

回答

0

更新

末st 現在的版本支持ipv6解析。 所以解析一個ipv6「。PCAP」文件scapy現在它可以做到像這樣:

from scapy.all import * 

scapy_cap = rdpcap('file.pcap') 
for packet in scapy_cap: 
    print packet[IPv6].src 

現在我曾評論回來時,這個問題最初提出爲老年人 scapy版本(不支持IPv6解析):

  • pyshark可以用來代替(pyshark是tshark的包裝器),如下所示:

import pyshark 

shark_cap = pyshark.FileCapture('file.pcap') 
for packet in shark_cap: 
    print packet.ipv6.src 
  • 甚至當然tshark(種的Wireshark終端版本):

$ tshark -r file.pcap -q -Tfields -e ipv6.src