【问题标题】:Wireshark Dissector in LuaLua 中的 Wireshark 解剖器
【发布时间】:2012-05-11 05:00:10
【问题描述】:

首先,我完全是 Lua 新手,这是我第一次尝试编写一个 wireshark 解析器。

我的协议很简单——一个 2 字节长度的字段,后跟一个该长度的字符串。

当我通过 Lua 控制台运行代码时,一切正常。

将代码添加到 Wireshark 插件目录时,出现错误

Lua 错误:[string "C:\Users...\AppData\Roaming\Wireshark..."]:15: call 'add' on bad self (number expected, got string)

第 15 行对应的是t:add(f_text... 行。

谁能解释执行方法之间的差异?

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

【问题讨论】:

  • 我注意到我使用了wireshark.org/docs/wsug_html_chunked/…wiki.wireshark.org/Lua/Dissectors 来获得灵感。有没有好的 API 文档来源?
  • Chapter 11 的用户指南是 Lua 接口的 API 文档。第 11.10、11.11 和 11.12 节是功能接口。除此之外,实际上没有任何文档可供使用。在我看来,您的解剖器应该按书面规定工作。您的代码显示您获得了对数据解析器 (local data_dis = Dissector.get("data")) 的引用,但您没有使用它。这是您完整的解析器代码吗?如果没有,您可能会不小心在此处未显示的位置更改 t
  • 这是我完整的解析器代码,data_dis 是链接样本的遗留问题。

标签: lua wireshark wireshark-dissector


【解决方案1】:

您的解析器代码非常接近正确,但您正在做界面无法接受的额外工作。如果您像这样更改 dissector 函数,

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)) --let Wireshark do the hard work
        t:add(f_text,buf(2,len)) --you've already defined their labels etc.
end

您将获得所需的行为。已经为您的字段定义了标签“文本”和“长度”,因此无需在第 15 行和第 16 行再次提供它们。

【讨论】:

  • 谢谢。我在下班前匆忙发布了这个问题,并花时间思考更多,这现在更有意义。虽然,我仍然对它为什么通过 Lua 控制台工作感到困惑!
猜你喜欢
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多