【发布时间】:2017-08-15 06:10:57
【问题描述】:
我有大约 10GB 的 pcap 数据和 IPv6 流量来分析存储在 IPv6 标头和其他扩展标头中的信息。为此,我决定使用 Scapy 框架。我试过 rdpcap 功能,但对于这么大的文件,不推荐。它试图将所有文件加载到内存中并卡在我的情况下。 我在网上发现,在这种情况下 sniff 是推荐的,我的代码如下:
def main():
sniff(offline='traffic.pcap', prn=my_method,store=0)
def my_method(packet):
packet.show()
在名为 my_method 的函数中,我分别接收每个数据包并且可以解析它们,但是.... 当我使用内置框架方法调用 show 函数时,我得到了这样的结果:
当在 Wireshark 中打开时,我得到了正确的数据包:
你能告诉我如何在 scapy 中解析这些数据包以获得正确的结果吗?
编辑: 根据 cmets 中的讨论,我找到了一种用 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
【问题讨论】:
-
@coder 我知道wireshark 以不同的方式显示数据包,我对此很满意。但是看看 src ip 地址以及它是如何被 scapy 解析的——据我所知,这并不好,但也许我不对。
-
哦,是的,你是对的 - 我错过了 ipv6 部分。
-
我在 scapy github 页面 (github.com/secdev/scapy/issues/579) 上打开了 bug 问题。 @coder 你提到使用wireshark 会更有效率。我的目标是获取标头的每个值并进行一些统计工作——wireshark 是否能够执行此类活动?
-
据我所知,有一些与 Wireshark 相关的脚本和工具可以帮助完成此类工作,例如
capinfos和tshark,但我过去并没有太多使用它们。 - 但我认为它们可以用来做统计分析。你可以在这里找到它们:wiki.wireshark.org/Tools -
例如你可以这样做:
import pyshark,cap = pyshark.FileCapture('v6.pcap'),然后是for packet in cap: print packet.ipv6.src