Надеюсь, это вам поможет. Я нашел некоторые различия между 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
Я не проверил документацию в полном объеме, может есть некоторые методы оптимизации.
Какие пакеты составляют большинство pcap? (протокол и размер) –
Простое обращение к библиотеке Python от Cython не позволяет значительно улучшить скорость. Только биты, которые вы пишете сами, скомпилированы, все остальное работает с одинаковой скоростью. – DavidW
@KiranBandla - пакеты около 500b – Jshee