3

我尝试在 lua 上为wireshark 编写解剖器。我需要解析头字段版本= 4字节(0x00000000)

我的代码:

do 

    local asc_sccp =Proto("asc_sccp", "ASC Skinny Client Control Protocol") 

    local f =asc_sccp.fields 


    f.length = ProtoField.bytes("asc_sccp.length", "length")  
    f.version =ProtoField.uint8("asc_sccp.version", "version", base.HEX, 0xC)



    function asc_sccp.init() 
    end  


    function asc_sccp.dissector(buffer,pinfo,tree)

        local subtree = tree:add (asc_sccp, buffer())
        local offset = 0

        pinfo.cols.protocol = asc_sccp.name

        local length = buffer (offset, 4)

        subtree:add (f.length, length)
        subtree:append_text ("Data length: " .. length) 

        offset = offset + 4 

        local version = buffer (offset, 4)

        subtree:add (f.version, version)
        subtree:append_text ("    Version: " .. version)


    end

    local tcp_table = DissectorTable.get("tcp.port") 
    tcp_table:add(2000, asc_sccp)  

end

为什么我收到错误'尝试索引全局'基础'(零值)'?你能帮忙吗,我浏览了很多解剖器的例子,但我找不到解决方案

4

2 回答 2

2

这可能是因为init.lua未安装而发生的。如果未安装开发包,这可能发生在基于 Redhat 的发行版(Fedora、Centos、RHEL 等)中。在这里查看答案:https ://stackoverflow.com/a/40489742/409638

于 2016-11-10T15:33:52.423 回答
1

在这行代码中:

f.version =ProtoField.uint8("asc_sccp.version", "version", base.HEX, 0xC)

您正在访问变量“base”。具体来说,您通过告诉 Lua 它是一个包含键“HEX”的表并尝试检索该键的值来对其进行索引。除非你在某处将变量'base'定义为一个表(或userdata)并在键“HEX”处添加一个值,否则lua会抱怨你试图索引一个名为'base'的全局变量,而它实际上是nil (即不存在)。

于 2012-05-05T05:18:22.370 回答