【问题标题】:Wireshark Dissector in Lua error: "Tree item ProtoField/Protocol handle is invalid"Lua 错误中的 Wireshark Dissector:“树项 ProtoField/协议句柄无效”
【发布时间】:2023-04-09 18:41:01
【问题描述】:

我完全是 Lua 新手,这是我第一次尝试编写 wireshark 解析器。
我想通过 Lua 脚本分析没有密码的 SSH。我写了一个脚本来检测第一步的数据包长度和填充长度。

这是我的脚本:

do
    local p_test = Proto("test","Test.");

    local f_packet_length = ProtoField.uint32("packet_length")
    local f_padding_length = ProtoField.uint8("padding_length")


    p_test.fields = {
        f_packet_length,
        f_padding_length
    }

    function p_test.dissector(buf,pkt,root)
        local offset = 0
        local buf_len = buf:len()

        local t = root:add(p_test, buf:range(offset))

        t:add(f_packet_length,buf:range(offset,4))
        offset = offset+4
        t:add(f_padding_length,buf:range(offset,1))
        offset = offset+1

    end

    local tcp_table = DissectorTable.get("tcp.port")

    tcp_table:add(22,p_test)
end

在我通过 Evalutate Lua 运行代码并应用测试过滤器后,我发现 Packet Details 中有错误:

Lua Error: [string "do..."]:19: Tree item ProtoField/Protocol handle is invalid (ProtoField/Proto not registered?)

第 19 行对应 t:add(f_packet_length... 行。

谁能帮忙解释一下这个错误?
提前致谢。

【问题讨论】:

    标签: lua wireshark wireshark-dissector


    【解决方案1】:

    如果上面的代码在 Wireshark 的真实 Lua 脚本中,则可以正常工作...通过位于个人插件目录中的 .lua 文件中,或者通过“-X lua_script:<filename>”命令行开关加载.

    但是您不能在tools->evaluate 窗口中注册新协议,因为到那时注册新协议(或新字段)为时已晚。不幸的是,Wireshark 报告的错误并不清楚这一点,因为它有点工作,但实际上它不起作用并且无法工作。

    问题是新协议注册在内部分两个阶段进行:第一阶段是加载和执行 Lua 脚本时,将协议和字段添加到内部临时表中,然后在所有 lua 脚本加载后第二阶段有新的协议和字段从临时表移动到它们的最终运行时表并注册,然后wireshark完成加载,你会看到GUI。当 Wireshark 首次启动时,第二阶段仅发生一次。但是运行tools->evaluate 窗口毕竟发生了,所以为时已晚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多