python-用scapy读取PCAP文件

我有大约10GB的pcap数据和IPv6流量,用于分析存储在IPv6头和其他扩展头中的信息.为此,我决定使用Scapy框架.我尝试了rdpcap函数,但是对于如此大的文件,不建议这样做.它试图将所有文件加载到内存中并卡在我的情况下.
我在网上发现在这种情况下建议使用嗅探器,我的代码如下所示:

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


def my_method(packet):
   packet.show()

在名为my_method的函数中,我分别接收每个数据包,并且可以解析它们,但是….
当我使用内置框架方法调用show function时,我得到了如下信息:

在wireshark中打开时,我可以正确查看数据包:

您能告诉我如何解析这些数据包以获取正确的结果吗?

编辑:
根据评论中的讨论,我找到了一种使用Python解析PCAP文件的方法.我认为最简单的方法是使用pyshark框架:

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

使用for循环可以轻松地迭代读取的文件

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

解决方法:

更新资料

现在,最新的版本支持ipv6解析.
因此,现在可以使用scapy解析ipv6“ .pcap”文件,如下所示:

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
上一篇:python-Scapy TCP RST攻击


下一篇:3次握手并在Python中使用Scapy获取请求