2010-08-31 7 views
10

Finalmente he creado un Dissector para mi protocolo UDP en Lua for Wireshark, pero el flujo de trabajo es simplemente espantoso. Consiste en editar mi archivo Lua personalizado en mi editor, y luego hacer doble clic en mi archivo de captura de ejemplo para iniciar Wireshark y ver los cambios. Si hubo un error, Wireshark me informa a través de cuadros de diálogo o una línea roja en el subpanel de análisis de árbol. Luego vuelvo a editar mi archivo Lua personalizado y luego cierro esa instancia de Wireshark, luego hago doble clic en mi archivo de captura de ejemplo nuevamente. Es como compilar un archivo C y ver solo un error del compilador a la vez.Cómo mejorar el flujo de trabajo para crear un disecador de Wireshark basado en Lua

¿Existe alguna forma mejor (más rápida) de ver mis cambios, sin tener que reiniciar Wireshark todo el tiempo?

En ese momento, estaba usando Wireshark 1.2.9 para Windows con Lua habilitado.

+1

¿Hay algún tutorial lua dissector útil y documentación de clase? – harper

+0

@harper Las clases y funciones están documentadas en https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html – Lekensteyn

+0

@Lekensteyn Sí, hay una lista de clases y funciones. Pero se le pidió un flujo de trabajo en lugar de esa lista. – harper

Respuesta

1

Es posible que pueda escribir una función de envoltura trivial que carga Wireshark y que solo cargue el archivo real desde el disco (por ejemplo, a través de dofile()). Esto probablemente podría "engañar" a Wireshark para que vuelva a cargar siempre tu código Lua hasta que te sientas más cómodo con él y puedas eliminar este truco.

5

La mejor manera de automatizar esto es mediante el uso de la línea de comandos. Sí, usa tshark en lugar de cargar la interfaz gráfica de usuario.

Si su script lua se llama "proto.lua" y que define un protocolo llamado "MyProto" que utiliza el puerto 8888, usted puede probar su disector usando:

tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888" 
opción
  • -V hace tshark imprime toda la información de todos los protocolos.
  • -O opción filtra la opción -V para que muestre toda la información solo en los protocolos enumerados (CSV).
  • -f opción filtra todos los paquetes que no se ajustan a la regla. En este caso, cualquier paquete que no sea del puerto correcto.
1

El último lanzamiento de Wireshark viene con una consola primitiva para ejecutar script lua. Se puede encontrar en Herramientas -> Lua -> Evaluar. A partir de ahí, podrá volver a cargar su disector ejecutando dofile(). También deberá eliminar la versión anterior de su dissector.

Aquí hay un ejemplo para un disector basado en TCP.

local tcp_dissector_table = DissectorTable.get("tcp.port") 
tcp_dissector_table:remove(pattern, yourdissector) 
yourdissector = nil 

dofile("c:/path/to/dissector.lua") 

Recomiendo colocar este código en una función dentro de su archivo.

Ahora hay un problema con esta respuesta: Si su script creó un objeto Proto, parece que no puede volver a crearlo con el mismo ID. El constructor para la clase Proto llama a la función C proto_register_protocol() (ver epan/wslua/wslua_proto.c). No puedo encontrar ninguna función lua que anule el registro del protocolo. De hecho, ni siquiera puedo encontrar una función C para anular el registro.

+0

"De hecho, ni siquiera puedo encontrar una función C para anular el registro". No hay uno: sin Lua, no hay ningún mecanismo para registrar disectores (u otros complementos) en cualquier momento que no sea el tiempo de inicio, por lo que no hubo necesidad de * un * registro. Con Lua, podría tener sentido agregar eso (y agregar algunas capacidades IDE a Wireshark para Lua, creo que alguien tiene un IDE escrito en Lua que quizás podría usarse para esto). –

Cuestiones relacionadas