【发布时间】:2014-10-18 01:21:53
【问题描述】:
我一直在寻找一种将 .cap 文件中的 802.11 数据包放入数组的方法。到目前为止,我发现:
斯卡皮: 这很好,文档可用,但是太慢了,当我尝试打开大小 > 40 Mb 的文件时,我一直挂着,直到它消耗了我所有的 Ram(全部 16 个演出),此时我的电脑只是块,我必须重新启动它
Pyshark: 没有任何 Scapy 的问题,但是文档太稀缺,我找不到处理和获取 802.11 数据包属性的方法
所以我在想也许有更好的解决方案,或者也许有人对 pyshark 有一些经验?
from scapy.all import *
import pyshark
from collections import defaultdict
import sys
import math
import numpy as np
counter=0
Stats = np.zeros((14))
filename='cap.cap'
a = rdpcap(filename)
print len(a)
for p in a:
pkt = p.payload
#Management packets
if p.haslayer(Dot11) and p.type == 0:
ipcounter = ipcounter +1
Stats[p.subtype] = Stats[p.subtype] + 1
print Stats
注意:当我以 10 兆字节的输入(例如)启动程序时,它需要大约 20 秒左右,但它确实有效,我想知道为什么会这样,为什么它与 pyshark 如此不同以及是什么样的它在做计算吗?
【问题讨论】:
-
我必须在这个上使用 python,它是更大框架的一部分
-
也许你可以展示你编写的用 Scapy 打开文件的程序。如果是这样,我们可以帮助您了解为什么它不起作用。
-
将立即进行编辑。
-
在工作中,我经常使用 rdpcap() 打开较大的文件(大约 60MB),它绝对不会占用 16GB 的 RAM。您是否尝试过从代码中删除所有其他内容并且只使用 rdpcap(),并在之前和之后进行时间测量?我简直不敢相信打开一个 40MB 的 pcap 文件需要超过 16GB 的 RAM。
-
顺便说一句,从我的角度来看,一个 10MB 的文件需要 20 秒是很正常的。如您所知,Scapy 将数据包分解为它知道的所有可能的标头和字段,并将它们存储在一个易于访问的数据结构中。