2010-12-13 16 views
7

Cuando escribe un disector para Wireshark, ¿cómo lo prueba? Buscar la salida visual en la UI no es suficiente para un protocolo nada trivial.¿Cómo se prueba un disector Wireshark?

¿Hay alguna manera de probar la unidad del disector?

EDIT:

La estructura de tramas de protocolo es dinámica. El disector debe de alguna manera interpretar el contenido.

Por ejemplo, si el quinto campo es uno, un conjunto de bytes sigue como el sexto campo. Si son dos, tiene una matriz doble y si son tres, debe agregar una cadena terminada en cero.

Esto generalmente nunca sucede en una captura de trabajo diario. Es por eso que necesita una captura de datos sintética incluso con contenido "imposible".

Respuesta

6

Para probar un disector Wireshark encontré este útil:

  • definir un conjunto de paquetes que el disector debe analizar incluyendo paquetes con formato incorrecto
  • Implementar los paquetes como un volcado hexadecimal
  • Definir la salida esperada
  • Para cada paquete volcar
    • generar archivos pcap con text2pcap
    • Ejecutar el disector con tshark
    • Se extrae la carga útil de la salida PDML de tshark
    • comparar la salida XML con la salida XML esperado

Esto se puede mejorar mediante el filtrado de la salida XML desde PDML también incluye los bytes del paquete, lo que puede ser molesto si la carga útil es grande y/o compleja.

El sugeridos argumentos para los ejecutables Wireshark son

text2pcap -T 1024,9876 foo.txt foo.pcap 
tshark -T pdml -r "foo.pcap" 

Para extraer la salida disector que es útil el uso de una expresión XPath con el XmlNode clase CLR .NET. Esto se puede hacer, por ejemplo, de esta manera:

XmlNode output = tsharkOutput.SelectSingleNode("packet/proto[@name='foo']"); 
XmlNodeList refList = referenceDocument.SelectNodes("proto[@name='foo']"); 
-1

Supongo que estoy pasado de moda. El objetivo principal de un disector es transformar los datos a una forma legible por humanos, así que probé los míos al hacer que los humanos lo leyeran.

Supongo que podría hacer más pruebas automatizadas exportando a txt o pdml desde file->export, o implementando algún tipo de envoltorio de prueba alrededor de su DLL de complemento.

+0

Sólo se puede comprobar la salida de los datos reales. Pero también debe probar el comportamiento del disector si obtiene datos que no se ajustan a la especificación del protocolo actual, es decir, la próxima versión. – harper

+0

¿Estás preguntando cómo generar datos de prueba? El formato del archivo libpcap está bien documentado en http://wiki.wireshark.org/Development/LibpcapFileFormat –

+0

No. La generación es solo un punto en las pruebas. Más interesante es la salida del disector. – harper

0

Puede analizar la salida de tshark.

+0

Suena razonable. Pero tengo muchos tipos de cuadros, variantes de cuadros y quiero comprobar el comportamiento con marcos que contienen datos no válidos. Por lo tanto, necesito un accesorio para proporcionar un conjunto de datos y adivinar cómo el disector encuentra los datos y probablemente vuelve a sincronizarlos si no se sincroniza. Un enfoque formal sería tsharks pdml output para ser comparado con un patrón XML. Pero, ¿cómo omito las partes que no son necesarias? – harper

0

Solo para actualizar la publicación.

Tshark utiliza los mismos complementos que Wireshark, y los carga de la misma manera .tshark también se utiliza de esta manera en las pruebas de compilación de Wireshark CI , consulte el directorio de prueba de las fuentes de Wireshark para algunos ejemplos de script de prueba .
https://code.wireshark.org/review/gitweb?p=wireshark.git;a=tree;f=test
- grahamb.

fuente: https://ask.wireshark.org/questions/36721/tshark-for-plugin-testing

Cuestiones relacionadas