2017-03-22 387 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