En primer lugar, soy nuevo en Lua en general, y este es mi primer intento de escribir un dissector wireshark.Wirshark Disector en Lua
Mi protocolo es sencillo: un campo de 2 bytes de longitud, seguido de una cadena de esa longitud.
Cuando ejecuto el código a través de la consola Lua, todo funciona como se esperaba.
Cuando se añade el código para el directorio de plugins de Wireshark, me sale el error
Lua Error: [string "C:\Users...\AppData\Roaming\Wireshark..."]:15: calling 'add' on bad self (number expected, got string)
Línea 15 corresponde es la línea t:add(f_text...
.
¿Alguien puede explicar la discrepancia entre los métodos de ejecución?
do
local p_multi = Proto("aggregator","Aggregator");
local f_len = ProtoField.int16("aggregator.length","Length",base.DEC)
local f_text = ProtoField.string("aggregator.text","Text")
p_multi.fields = { f_len, f_text }
local data_dis = Dissector.get("data")
function p_multi.dissector(buf,pkt,root)
pkt.cols.protocol = "Aggregator"
local len = buf(0,2):int()
local t = root:add(p_multi,buf(0,len+2))
t:add(f_len,buf(0,2),"Length: " .. buf(0,2):int())
t:add(f_text,buf(2,len),"Text: " .. buf(2,len):string())
end
local tcp_encap_table = DissectorTable.get("tcp.port")
tcp_encap_table:add(4321,p_multi)
end
Notaré que he usado http: //www.wireshark .org/docs/wsug_html_chunked/wslua_dissector_example.html y http://wiki.wireshark.org/Lua/Dissectors en busca de inspiración. ¿Hay alguna buena fuente de documentación API? – Edgemaster
[Capítulo 11] (http://www.wireshark.org/docs/wsug_html_chunked/wsluarm.html) de la Guía del usuario es la documentación de API para la interfaz de Lua. Las secciones 11.10, 11.11 y 11.12 son la interfaz funcional. Más allá de eso, no hay realmente ninguna documentación que se tenga. Me parece que su disector debería funcionar como está escrito. Su código muestra que obtiene una referencia al disector de datos ('local data_dis = Dissector.get (" data ")'), pero que no lo usa. ¿Es este tu código disector completo? Si no, puedes estar alterando accidentalmente 't' en algún lugar que no se muestra aquí. – multipleinterfaces
Es mi código disector completo, data_dis es un hang-over de las muestras vinculadas. – Edgemaster