Wireshark Lua解剖器:两者一起扩展

时间:2015-07-12 02:05:08

标签: lua wireshark wireshark-dissector

我为链式协议写了两个简单的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)

解剖器可以在树中一个接一个地工作和显示协议。 现在,如果我扩展其中一个协议(因此可以看到protofield)并单击另一个数据包,那么树中的proto1和proto2都会因未知原因而扩展。 如果我现在折叠其中一个协议并单击另一个数据包,则两者都会折叠。

有任何建议如何避免它?我的协议比这里显示的更复杂,因此这种扩展使得分析变得困难。

1 个答案:

答案 0 :(得分:1)

这是一个错误。我可以发誓之前修复过,然后正常工作。请在bugs.wireshark.org上提交错误。

与此同时,你可以伪造它:

<?php
foreach($_POST as $key => $value)
{
    $esc_key = strtolower(trim($key);
    if (substr($esc_key), 0, 2) === 'id') {
        isset($_POST[$key]) ? $ids[] = intval(trim($value)); : $ids[] = 0;
    }
}