Principal Otro Cómo usar el disector Lua en Wireshark

Cómo usar el disector Lua en Wireshark



Como una de las mejores herramientas de captura de paquetes de red del mundo, Wireshark le permite obtener paquetes de datos específicos para que pueda analizarlos tanto fuera de línea como en tiempo real. Piense en la aplicación como una forma de examinar de cerca los datos que fluyen a través de su red, lo que le permite detectar problemas e irregularidades.

  Cómo usar el disector Lua en Wireshark

Puede usar disectores si desea analizar una parte específica de los datos de un paquete. Como su nombre lo indica, este proceso 'disecciona' el código, lo que le permite eliminar ciertos aspectos que requieren su atención. Este tutorial explica cómo crear y usar disectores en Wireshark usando el lenguaje de programación Lua.

Antes de comenzar: lo que necesita saber sobre los disectores

Aunque los disectores ofrecen una forma rápida de analizar partes de un paquete de datos en Wireshark, deben seguir algunos protocolos para funcionar de manera efectiva. Estos protocolos incluyen lo siguiente:

  • Cada disector que cree debe estar registrado para manejar un tipo determinado de carga útil de un protocolo diferente. Para completar este registro, debe asignar un objeto 'Proto' a su disector, que verá a continuación.
  • Cuando llama a un disector a través de Wireshark, recibe tres cosas de la aplicación:
    • Objeto TVB: un búfer TVB del paquete de datos.
    • Objeto TreeItem: una raíz de árbol que representa un solo nodo en un árbol de datos.
    • Objeto Pinfo: un registro de información de paquetes.
  • Solo puede llamar a un disector si su paquete de datos coincide con la DissectorTable que configuró en su objeto 'Proto'.
    • Puede solucionar este requisito forzando el uso de un disector a través de la función 'Decodificar como'. Pero incluso entonces, solo puede forzar el disector si la DissectorTable que configuró en su objeto 'Proto' es del tipo correcto.

Configuración de su disector usando LUA

Como Wireshark está escrito y usa el lenguaje de programación C, la mayoría de los disectores están escritos de manera similar en C. Sin embargo, es posible que desee usar Lua. Este lenguaje de secuencias de comandos es más simple que C y, por lo tanto, más accesible para los recién llegados a la codificación o para aquellos que simplemente desean crear un disector usando un lenguaje más liviano.

cómo comprobar la velocidad de mi ram

Aunque su código será más simple, el disector que obtiene al usar Lua suele ser más lento que el que crearía usando C. Sin embargo, estos son los pasos a seguir si desea crear un disector Wireshark usando Lua.

Paso 1: configurar Lua en Wireshark

Deberá configurar Lua si no lo ha usado en Wireshark antes:

  1. Haga clic en 'Ayuda', seguido de 'Acerca de Wireshark'.
  2. Haz clic en 'Carpetas'.
  3. Elija uno de los siguientes para crear un script Lua activo:
    • Complementos globales de Lua
    • Complementos personales de Lua
    • Personal

Una vez activado, su script estará listo cada vez que inicie Wireshark. Cada vez que realice un cambio en ese script, debe reiniciar Wireshark para registrar el cambio o presionar 'Ctrl + Shift + L' para volver a cargar todos sus scripts de Lua para activar sus cambios.

Paso 2: los pasos básicos para crear su disector

Si ya está familiarizado con Lua, puede seguir los siguientes pasos para crear su propio script de disector que funcionará en Wireshark:

  • Declare el protocolo para su disector, lo que requiere que establezca un nombre largo para usar en el árbol de protocolos y un nombre corto que sirva como nombre de filtro de visualización del disector.
    • Cree los siguientes tres campos, con sus tipos apropiados:
    • Pregunta: muestra el tipo de pregunta.
    • Respuesta: muestra el tipo de respuesta.
  • MessageType: demuestra si su paquete solicita una pregunta o una respuesta.
  • Registre sus campos para que Wireshark sepa cómo mostrarlos. Sin campos registrados, recibirá un mensaje de 'Error de Lua', que generalmente le indica que su ProtoField de elemento de árbol no es válido.
  • Cree una función de disección que incluya el Pinfo mencionado anteriormente (que contiene datos sobre su paquete) y el Elemento de árbol (que crea el árbol que agregará a un subárbol). También debe crear un 'búfer', que se encuentra en la parte superior de su TCP.
  • Especifique tanto el protocolo como el puerto para los que Wireshark debe usar el disector. Por ejemplo, puede establecer el protocolo en 'TCP' y el número de puerto en el que desee utilizar.

Paso 3: agregue su disector a Wireshark

En este momento, su disector es como una bombilla sin electricidad. Existe, pero no te sirve de nada hasta que puedas pasar algo de energía a través de él. En otras palabras, su disector aún no se ha agregado a Wireshark, por lo que debe agregarlo manualmente para que funcione siguiendo estos pasos:

  1. Haga clic en 'Ayuda' y diríjase al menú 'Acerca de Wireshark'.
  2. Seleccione la pestaña 'Carpeta' para encontrar una lista de rutas para su archivo Lua.
  3. Elija 'Complementos personales de Lua'. Cree un directorio si es necesario.
  4. Copie y pegue el archivo Lua que creó en el directorio 'Personal Lua Plugins'. Recarga Wireshark para encender el disector.

Es una buena idea realizar una prueba en su nuevo disector abriendo algunos de los paquetes que ha capturado. Wireshark debe entregar un mensaje que muestre el nombre largo que eligió para su disector, junto con información sobre el tipo de mensaje (pregunta o respuesta) y el resultado de su verificación.

cómo ver quién te sigue en twitch

Algo de código de muestra

Si no ha creado un disector antes (o es nuevo en Lua), Tiburón alambre ofrece un útil disector de ejemplo para que lo pruebe:

local p_multi = Proto("multi", "MultiProto");
local vs_protos = {
    [2] = "mtp2",
    [3] = "mtp3",
    [4] = "alcap",
    [5] = "h248",
    [6] = "ranap",
    [7] = "rnsap",
    [8] = "nbap"
}
local f_proto = ProtoField.uint8("multi.protocol", "Protocol", base.DEC, vs_protos)
local f_dir = ProtoField.uint8("multi.direction", "Direction", base.DEC, { [1] = "incoming", [0] = "outgoing"})
local f_text = ProtoField.string("multi.text", "Text")
p_multi.fields = { f_proto, f_dir, f_text }
local data_dis = Dissector.get("data")
local protos = {
    [2] = Dissector.get("mtp2"),
    [3] = Dissector.get("mtp3"),
    [4] = Dissector.get("alcap"),
    [5] = Dissector.get("h248"),
    [6] = Dissector.get("ranap"),
    [7] = Dissector.get("rnsap"),
    [8] = Dissector.get("nbap"),
    [9] = Dissector.get("rrc"),
    [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
    [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function p_multi.dissector(buf, pkt, tree)
    local subtree = tree:add(p_multi, buf(0,2))
    subtree:add(f_proto, buf(0,1))
    subtree:add(f_dir, buf(1,1))
    local proto_id = buf(0,1):uint()
    local dissector = protos[proto_id]
    if dissector ~= nil then
        -- Dissector was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two bytes).
        dissector:call(buf(2):tvb(), pkt, tree)
    elseif proto_id < 2 then
        subtree:add(f_text, buf(2))
        -- pkt.cols.info:set(buf(2, buf:len() - 3):string())
    else
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

Postdisectores y disectores encadenados

Es posible que desee profundizar un poco más en el uso de su disector una vez que haya dominado su creación en Lua. Wireshark ofrece dos tipos adicionales de disectores, postdisectores y disectores encadenados, que ofrecen más funcionalidad.

Un disector posterior se parece mucho a una verificación final de todos los disectores que ha ejecutado para un paquete. Lo registra para recibir una notificación una vez que Wireshark haya llamado a todos los demás disectores que desea que use, y puede usarlo para filtrar las columnas 'Protocolo' e 'Información'. Esta función es especialmente útil si desea filtrar varios paquetes en una sesión en la que ha tenido una gran brecha entre los conjuntos de datos y no puede recordar cada uno individualmente.

El encadenamiento de disectores cumple una función similar (al menos en términos de filtrado a través de disectores usados ​​anteriormente) al brindarle acceso a los datos de un solo disector. La ventaja clave aquí es que el disector encadenado no tiene que volver a ejecutar todos los paquetes, lo que le brinda un resultado sin obligarlo a esperar a que el disector original vuelva a ejecutarse.

Diseccionar en Lua

Dado que Wireshark ya ofrece la capacidad de crear disectores en C (su lenguaje natural), es posible que no vea la necesidad de crearlos también en Lua. Aún así, aquellos que no se sientan cómodos con C, así como aquellos que ya dominan Lua, pueden encontrar que la secuencia de comandos ligera de Lua facilita la creación de sus disectores. Por supuesto, debe compensar un tiempo de carga más largo cuando ejecuta el proceso en comparación con los disectores basados ​​en C, pero es útil tener la opción de todos modos.

Dicho esto, queremos saber de usted. ¿Con qué frecuencia utiliza disectores en Wireshark? ¿Ha intentado crearlos en C antes y qué beneficios cree que ofrece la creación de disectores en Lua? Háganos saber en la sección de comentarios.

Artículos De Interés

La Elección Del Editor

La función de fregadero A2DP está regresando a Windows 10
La función de fregadero A2DP está regresando a Windows 10
Microsoft está volviendo a agregar el A2DP Sink para Bluetooth en Windows 10. Se eliminó en Windows 8, lo que convierte a Windows 7 en la última versión del sistema operativo compatible con A2DP Sink. Ahora, las cosas están cambiando. Anuncio En las versiones preliminares de Windows 7, las funciones de fuente y receptor de A2DP eran compatibles de forma nativa, pero esto se eliminó en la versión final de lanzamiento de RTM.
Cómo agregar archivos y carpetas al menú de inicio de Windows 10
Cómo agregar archivos y carpetas al menú de inicio de Windows 10
Esta guía de TechJunkie cubrió cómo puede personalizar el menú Inicio de Windows 10. Además de agregar nuevos mosaicos, también puede agregar nuevos accesos directos a carpetas y archivos a la lista Todas las aplicaciones en el menú. Así es como
Cómo agregar PayPal a StockX
Cómo agregar PayPal a StockX
¿Cuál es su método para realizar pagos en línea en sitios web como StockX? Hoy en día, no es un gran problema usar su tarjeta de débito o crédito en línea para realizar compras, y StockX tiene la reputación de ser muy seguro. Pero
Cómo cambiar el nombre de tu teléfono en Android
Cómo cambiar el nombre de tu teléfono en Android
Cambiar el nombre de tu teléfono Android es una medida sencilla y consciente de la seguridad cuando sabes qué hacer. Aquí se explica cómo cambiarlo, incluso en Samsung.
Cómo crear un acceso directo para abrir el panel Proyecto en Windows 8.1
Cómo crear un acceso directo para abrir el panel Proyecto en Windows 8.1
La función Proyecto (Win + P), que se introdujo con Windows 7, es una utilidad sorprendente que le permite compartir la pantalla entre dos monitores conectados a su PC. Cuando conecta un monitor adicional, Windows lo detecta automáticamente y aplica la configuración de video que mejor se adapta a la pantalla del monitor. Con el panel Proyecto
Cómo usar el modo de baja latencia de NVIDIA
Cómo usar el modo de baja latencia de NVIDIA
Si juegas mucho en tu PC, sabes lo vital que es la latencia del sistema para tu rendimiento. La alta latencia del sistema puede afectar negativamente la capacidad de respuesta de la PC. Afortunadamente, si tiene una tarjeta gráfica NVIDIA, puede reducir su
El disco duro externo no aparece en Mac: qué hacer
El disco duro externo no aparece en Mac: qué hacer
https://www.youtube.com/watch?v=EGZtVD9VQYM Las Mac son computadoras bastante sólidas que brindan un servicio confiable en casi cualquier situación; Por lo general, son caballos de batalla, avanzando en situaciones que obtendrían una pantalla azul de la muerte en una PC con Windows.