Wireshark Lua分析器 - 如何设置源和目的地

我正在使用 Lua 编写 Wireshark 解析器。

我尝试尽可能向 Wireshark 提供有关我的自定义协议的信息,以利用可用的分析工具。因此,我正在尝试为我的协议设置正确的源地址和目标地址。

我的协议可能在不同的其他协议之上,如 UDP 或 IEEE 802.15.4。因此,甚至可能已经设置了包源地址/目标地址(UDP)。

但是我想让 Wireshark 显示我的地址,所以我尝试了下面的代码:

myproto = Proto("myproto"), "My Protocol")
myproto_source = ProtoField.uint16("myproto.src", "Source Address", base.HEX)
myproto.fields = { myproto_source }

function myproto.dissector(buffer, pinfo, tree)
    local subtree = tree:add(myproto, buffer(), "My Proto")

    subtree:add(myproto_source, buffer(0,2)

    -- does not work with error:
    -- bad argument #1 to '?' (Address expected, got userdata)
    pinfo.src = myproto_source

    -- does work, but only adds text, wireshark tools rely on pinfo.src
    pinfo.cols.src = tostring(buffer(0,2):uint())
end

udp_table = DissectorTable.get("udp.port")
udp_table:add( 12345, myproto )
wtap_encap_table = DissectorTable.get("wtap_encap")
wtap_encap_table:add(wtap["IEEE802_15_4"], myproto)

因此,是否可能有必要设置“地址”数据类型/类来设置 pinfo.src?或者是否有完全不同的方法来设置数据包信息?

提前感谢!

原文链接 https://stackoverflow.com/questions/9215170

点赞
stackoverflow用户218548
stackoverflow用户218548

仅仅是一些建议 - 我不是一个 LUA 高手:

pinfo:col.src = buffer(0,2):uint()

也许可以?

2012-02-09 17:03:16
stackoverflow用户88888888
stackoverflow用户88888888

pinfo.src 将会使用Address 对象 (它是一个IP地址,不是16位整数)。例如使用:

pinfo.src = Address.ip('1.2.3.4')

请注意,这只是设置在Wireshark中显示的"源"列的文本。基础包信息无法修改,IP数据包细节将继续显示实际的IP地址。

2012-02-09 18:27:01