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

Habilite la prevención de seguimiento estricta para el modo InPrivate en Microsoft Edge
Habilite la prevención de seguimiento estricta para el modo InPrivate en Microsoft Edge
Cómo habilitar la prevención de seguimiento estricta para el modo InPrivate en Microsoft Edge Si es usuario de Microsoft Edge Chromium, ahora puede habilitar el modo de prevención de seguimiento 'estricto' para la navegación InPrivate. La opción adecuada está disponible con la última versión de Canary del navegador. Advertisment En Edge, la protección de rastreo incluye tres niveles. los
La lista de juegos exclusivos de PS5
La lista de juegos exclusivos de PS5
Echa un vistazo a los juegos exclusivos de Sony PlayStation (PS5). Spider-Man Remastered, Demon's Souls, Horizon: Burning Shores y más.
Cómo hacer un collage de fotos en el iPhone
Cómo hacer un collage de fotos en el iPhone
https://www.youtube.com/watch?v=rJjYBB1pgTw Dicen que una imagen vale más que mil palabras. Bueno, ¡un collage de fotos vale diez mil palabras! Y sí, puedes crear un collage de fotos directamente en tu iPhone, que es
Cómo escuchar radio FM en Android
Cómo escuchar radio FM en Android
Piense en todas las formas en que puede escuchar música en 2017. Tal vez sea un purista que todavía prefiere escuchar música descargada directamente en un reproductor MP3. Quizás te hayas vuelto retro y hayas logrado coleccionar
¿Qué es la pantalla de cristal líquido (LCD)?
¿Qué es la pantalla de cristal líquido (LCD)?
Una pantalla LCD (pantalla de cristal líquido) es un dispositivo de visualización plano y delgado que aprovecha la tecnología para proporcionar una mejor calidad de imagen.
Archivos de categoría: scripts y ajustes
Archivos de categoría: scripts y ajustes
¿Olvidó la contraseña de Windows 10? Maneras fáciles de restablecerlo
¿Olvidó la contraseña de Windows 10? Maneras fáciles de restablecerlo
¿Olvidó su contraseña de administrador de Windows 10? ¿Su cuenta está bloqueada debido a repetidos intentos fallidos de inicio de sesión? ¿No puede iniciar sesión en su computadora porque su perfil de usuario está dañado o ha desactivado accidentalmente todas las cuentas? Puede haber otros escenarios en los que necesite restaurar el acceso a su cuenta de Windows. En este tutorial te mostraremos