я написал два простых диссекторы Wireshark Lua для прикованных протоколов:Wireshark Lua диссекторы: как расширить вместе
local proto1 = Proto("proto1","First Layer")
local page = ProtoField.uint16("proto1.page", "Page", base.HEX)
proto1.fields = {page}
function proto1.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = proto1.name;
local ptree = tree:add(proto1,buffer(1,5))
ptree:add(page, buffer(1,2))
Dissector.get("proto2"):call(buffer(6, 4):tvb(), pinfo, tree)
end
local proto2 = Proto("proto2","Second Layer")
local len = ProtoField.uint8("proto2.len", "Payload Length")
proto2.fields = {len}
function proto2.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = proto2.name;
local ptree = tree:add(proto2,buffer())
ptree:add(len, buffer(1,2))
end
DissectorTable.get("tcp.port"):add(3456, proto1)
В диссекторах сделать работу и отображать протоколы в дереве один за другим. Теперь, если я разворачиваю один из протоколов (так видимый протофилд) и нажимаем на другой пакет, то как proto1, так и proto2 в дереве расширяются по неизвестной причине. Если я сейчас обрушиваю один из протоколов и нажимаю на другой пакет, то оба будут свернуты.
Любой совет, как этого избежать? Мои протоколы сложнее, чем показано здесь, поэтому это расширение затрудняет анализ.
Ваш пример действительно работает, спасибо. У меня есть эти протоколы в отдельных файлах - возможно ли использовать ваше «поддельное» решение в этом случае без смешивания функций и полей в одном файле? Я попытался и получил много ошибок. – johnjey
Ну, для этой работы вам нужно зарегистрировать весь протокол ProtoField только для одного протокола Proto. Конечно, вы можете создавать объекты ProtoField в другом файле Lua, если другие файлы Lua загружаются до того, как основной устанавливает «Proto.fields» - либо с помощью функции Lua 'require' (если они 'написано как модули Lua) или с помощью 'dofile()'. Мне вообще не нравится использование 'dofile()' для загрузки плагинов Wireshark, но это разумно для загрузки других файлов Lua одного и того же плагина. – hadriel
BTW, если вы хотите просто немного подождать, ошибка уже выполняется, и вы должны иметь возможность загружать фиксированную версию завтра утром с [сайта автоматизированных сборок] [1]. Он не будет в официальном выпуске до следующего релиза 1.12.x, но это обычно довольно часто. [1]: https://www.wireshark.org/download/automated/ – hadriel