lua wireshark 解析器:Protofield 说明符
lua wireshark dissector: Protofield specifiers
我在 LUA 中有这个协议字段描述符:
local atcs_hdr = {
region = Protofield.uint16("atcs.rrp.region","Region",base.HEX)
}
生成此树项目:
Region: 0x9AA1
我真正需要的是将此十六进制值转换为“6817.1”的函数的字符串表示形式:
Region: 6817.1
我有一个执行此转换的本地函数:
local function HexToRegion(val)
-- input: 0xA70F
-- output: 9999.1
local region = bit.band(val,0x7FFF)
local dir = 0
if (bit.band(val,0x8000) == 0x8000) then
dir = 1
end
return string.format("%d.%d",region,dir)
end
但是我如何 link 它到 Protofield 说明符?
编辑:解析器将此 'region' 添加到此处的树中:
local region_tvbr = tvbuf:range(0,2)
tree:add("atcs.rrp.region",region_tvbr )
-- Region: 0x9AA1
我几乎可以通过添加字符串函数得到我想要的:
local region_tvbr = tvbuf:range(0,2)
local region_val = region_tvbr:uint()
local subtree = tree:add("atcs.rrp.region",region_tvbr)
subtree:append_text("("..HexToRegion(region_val)..")")
-- Region: 0x9AA1 (6817.1)
但这不是我要找的。
我想你应该可以使用set_text
来实现你想要的。例如:
local region_item = tree:add(atcs_hdr.region, tvbuf:range(0, 2))
region_item:set_text("Region: " .. HexToRegion(tvbuf:range(0, 2):uint()))
参考 Section 11.7. Adding information to the dissection tree in the Wireshark Developer's Guide for more information, or to the Wireshark LuaAPI/TreeItem 维基页面。
我在 LUA 中有这个协议字段描述符:
local atcs_hdr = {
region = Protofield.uint16("atcs.rrp.region","Region",base.HEX)
}
生成此树项目:
Region: 0x9AA1
我真正需要的是将此十六进制值转换为“6817.1”的函数的字符串表示形式:
Region: 6817.1
我有一个执行此转换的本地函数:
local function HexToRegion(val)
-- input: 0xA70F
-- output: 9999.1
local region = bit.band(val,0x7FFF)
local dir = 0
if (bit.band(val,0x8000) == 0x8000) then
dir = 1
end
return string.format("%d.%d",region,dir)
end
但是我如何 link 它到 Protofield 说明符?
编辑:解析器将此 'region' 添加到此处的树中:
local region_tvbr = tvbuf:range(0,2)
tree:add("atcs.rrp.region",region_tvbr )
-- Region: 0x9AA1
我几乎可以通过添加字符串函数得到我想要的:
local region_tvbr = tvbuf:range(0,2)
local region_val = region_tvbr:uint()
local subtree = tree:add("atcs.rrp.region",region_tvbr)
subtree:append_text("("..HexToRegion(region_val)..")")
-- Region: 0x9AA1 (6817.1)
但这不是我要找的。
我想你应该可以使用set_text
来实现你想要的。例如:
local region_item = tree:add(atcs_hdr.region, tvbuf:range(0, 2))
region_item:set_text("Region: " .. HexToRegion(tvbuf:range(0, 2):uint()))
参考 Section 11.7. Adding information to the dissection tree in the Wireshark Developer's Guide for more information, or to the Wireshark LuaAPI/TreeItem 维基页面。