2016-10-05 18 views
0

Я ищу, чтобы использовать dpkt или pyshark в сочетании с cython, чтобы ускорить синтаксический анализ большого количества данных (ГБ) в файле pcap.быстрее решение? : dpkt или pyshark через Cython

Я задавался вопросом, выполнил ли кто-нибудь dpkt с помощью cython OR pyshark с cython и мог ли он увеличивать скорость со мной? Im специально ищет, чтобы увеличить скорость скрипта python, просто не уверен, что dpkt или pyshark лучше сочетаются с cython.

Спасибо!

+0

Какие пакеты составляют большинство pcap? (протокол и размер) –

+0

Простое обращение к библиотеке Python от Cython не позволяет значительно улучшить скорость. Только биты, которые вы пишете сами, скомпилированы, все остальное работает с одинаковой скоростью. – DavidW

+0

@KiranBandla - пакеты около 500b – Jshee

ответ

0

Надеюсь, это вам поможет. Я нашел некоторые различия между pyshark и dpkt. Я попытался прочитать файл pcap (размер около 54 МБ) в основной памяти. Вот что происходит

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\[email protected]\[email protected]\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\[email protected]\x054\xexx') 
x84\x80\xx0\x01l^\xf0\xxx\x00\x01\xx1\xx8\n\x00\x05\[email protected]\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 (check here)
  • Здесь я могу напечатать print pcap[0] без преобразования в list. Таким образом, мы можем сделать итерацию непосредственно в объекте pcap. Но я пытаюсь напечатать len(pcap), показывая 0. Если я len(pcap) после печати print pcap[0] он показывает длину как 1

Испытано на CPython Compiler, Linux Quad-Core Processor Intel i3 Я не проверил документацию в полном объеме, может есть некоторые методы оптимизации.

+0

Несколько наблюдений: 1. dpkt pcap Reader - это итератор. Попытка индексирования пакета, как вы пытались, должна завершиться неудачей. 2.Выполнение 'list (pcap)' приводит к потере эффективности. Если вам действительно нужно это сделать, вы можете сделать 'pcap.readpkts()' –

 Смежные вопросы

  • Нет связанных вопросов^_^