我正在Lua的Wireshark Dissector工作。
我尝试尽可能多地提供有关我的自定义协议的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
可能需要一个数据类型/类“地址”吗?或者是否有完全不同的方式来设置数据包信息?
提前致谢!
答案 0 :(得分:2)
pinfo.src
采用Address
对象(这是一个IP地址;不是16位整数)。用法示例:
pinfo.src = Address.ip('1.2.3.4')
请注意,这仅设置Wireshark中显示的“Source”列的文本。基础数据包信息无法被修改,IP数据包详细信息将继续显示实际IP地址。
答案 1 :(得分:0)
只是一个建议 - 我不是LUA wiz:
pinfo:col.src = buffer(0,2):uint()
也许??