Диссекторы 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 в дереве развернутся по неизвестной причине. Если я сейчас сверну один из протоколов и нажму на другой пакет, то оба будут свернуты.
Любой совет, как этого избежать? Мои протоколы более сложны, чем показано здесь, поэтому это расширение затрудняет анализ.
1 ответ
Решение
Это ошибка. Я мог бы поклясться, что было исправлено раньше, а затем работал правильно. Пожалуйста, отправьте сообщение об ошибке на https://bugs.wireshark.org/bugzilla/.
А пока вы можете подделать его:
local proto1 = Proto("proto1","First Layer")
local page = ProtoField.uint16("proto1.page", "Page", base.HEX)
local proto2 = ProtoField.bytes("proto2","Second Layer")
local len = ProtoField.uint8("proto2.len", "Payload Length")
proto1.fields = {page, proto2, len}
local function proto2_dissect(buffer, pinfo, tree)
pinfo.cols.protocol = "proto2"
local ptree = tree:add(proto2, buffer()):set_text("Second Layer")
ptree:add(len, buffer(1,2))
end
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))
proto2_dissect(buffer(6,4):tvb(), pinfo, tree)
end
DissectorTable.get("tcp.port"):add(3456, proto1)