2012-05-29 83 views
5

Estoy usando la función rdpcap de Scapy para leer un archivo PCAP. También uso el módulo descrito en link to HTTP support in Scapy que es necesario en mi caso, ya que tengo que recuperar todas las solicitudes y respuestas HTTP y sus paquetes relacionados.Función scapy y rdpcap

Me di cuenta de que al analizar un archivo PCAP grande la función rdpcap toma demasiado tiempo para leerla.

¿Hay una solución para leer un archivo pcap más rápido?

+0

¿Qué tan grande es tu archivo pcap? ¿Cuánto tiempo lleva leerlo? ¿De verdad es demasiado largo (incluso para cargarlo solo una vez)? ¿Cuántas veces quieres leerlo (pregunta retórica)? –

+0

Mi archivo es mayor a 300 MB, tengo que iniciar el script de Python más de una vez. – auino

+0

@auino, ¿cuál es específicamente el problema con el tiempo de lectura? ¿Es que lleva mucho tiempo desarrollar su script cuando está analizando un archivo de 300MB cada vez que realiza un cambio, o hay algún requisito de procesamiento en tiempo real? Además, por favor, danos una idea de lo que es un tiempo de análisis aceptable –

Respuesta

4

Aunque estoy de acuerdo en que el tiempo de carga es más largo de lo que cabría esperar, es probable porque el archivo se está analizando para generar una matriz de objetos altamente compuestos. Lo que tuve que hacer fue usar editcap para cortar las capturas de los paquetes y facilitar su lectura. Por ejemplo:

$ editcap -B 2013-05-2810:05:55 -i 5 -F libpcap inputcapture.pcap outputcapture.pcap 

Tenga en cuenta: una explicación completa de los interruptores de este comando está disponible here.

Además, la parte -F libpcap parecía ser necesaria (al menos para mí) para obtener la función pcap de scapy capaz de analizar el archivo. (Se supone que este es el formato de salida del archivo pcap predeterminado, pero este no fue el caso para mí, por la razón que sea. Puede verificar el tipo de archivo de entrada y salida con capinfos (por ejemplo, simplemente ingrese capinfos your_capture.pcap).

Tanto capinfos y editcap están disponibles con la distribución WireShark

2

Scapy tiene otro método sniff que se puede utilizar para leer el PCAP archivos demasiado:.

def method_filter_HTTP(pkt): 
    #Your processing 

sniff(offline="your_file.pcap",prn=method_filter_HTTP,store=0) 

rdpcap cargas de todo el archivo pcap a la memoria. H En realidad usa mucha memoria y, como dijiste, es lenta. Mientras que sniff lee un paquete a la vez y lo pasa a la función prn proporcionada. El parámetro store=0 garantiza que el paquete se elimine de la memoria tan pronto como se procese.