0

I'm looking to use dpkt or pyshark coupled with cython, to speed up parsing of a lot of data (GBs) in a pcap file.

I wondered if anyone has run dpkt with cython OR pyshark with cython and could share the speed increases with me? Im specifically looking to increase speed of a python script, just not sure if dpkt or pyshark is better coupled with cython.

Thank you!

4

1 回答 1

0

我希望这可以帮助你。pyshark我发现和之间存在一些差异dpkt。我试图将一个pcap文件(大小约为 54MB)读入主内存。这是发生的事情

dpkt 模块

import dpkt
import time

filename="/opt/veeru_cap.pcap"
f = open(filename)
pcap = dpkt.pcap.Reader(f)

#print pcap[0] #<---Geting TypeError: 'Reader' object does not support indexing

print "Object-->",pcap
start=time.time()
print "The start time->",start
x=list(pcap) # Reading into Main Memory!
print "The end time->",time.time()
print "Total->",time.time()-start
print "Total Length/Total Number of Packet",len(x)
print "**********************PACKET**********************"
print x[0]

OUTPUT>

Object--> <dpkt.pcap.Reader object at 0x7f2ed1535210>
The start time-> 1497818746.66
The end time-> 1497818747.06
Total-> 0.407222986221
Total Length/Total Number of Packet 65150
**********************PACKET**********************
(1497807187.704669, '\x44\x49\x44\xfdg\xa2,\xd0ZG \x4x\x48\x00E\x00\x004E\xcf@\x00@\xx6<\xxf\xxx\xgg\x33i4$\xc2\xf0\x80\x46\x0x\x4b\\\xfd\xea\xe0\xe4\xc2\xb4\xxx\x80\x10\x01l^\xf0\x00\x00\x01\x01\x0x\n\x00\x05\x15@\x054\xexx')
x84\x80\xx0\x01l^\xf0\xxx\x00\x01\xx1\xx8\n\x00\x05\xxx@\x054\xe0J')
  • dpkt转储数据包的十六进制格式而不渲染。
  • 将所有数据包读入主内存的时间非常短(计算文件中的数据包很容易!)
  • 如您所见,我尝试print pcap[0]直接打印。它是一个对象,无法显示数据包 [注意这一点]

pyshark 模块

**重启后继续回答**

import pyshark
import time

filename="/opt/veeru_cap.pcap"  
cap=pyshark.FileCapture(filename)

print "**********************PACKET**********************"
print cap[0] #<----Still able to print without converting into "List" or something

print "Object--->",type(cap)
start=time.time()
print "The start time->",start
x=list(cap) # Reading into Main Memory!
print "The end time->",time.time()
print "Total->",time.time()-start

我在上面运行了脚本,但我的计算机变得没有响应,不得不重新启动。

  • 将整个数据包读入主存需要时间
  • 显示数据包格式真的很好,就像在wireshark检查这里
  • 在这里我可以打印print pcap[0]而无需转换为list. 所以我们可以pcap直接在对象中进行迭代。但我尝试打印len(pcap),它显示0。如果我len(pcap)在打印后这样做,print pcap[0]它会显示长度为1

经测试

CPython Compiler, Linux
Quad-Core Processor Intel i3 

我没有完全检查文档,可能有一些方法可以优化。

于 2017-06-20T06:53:52.353 回答