Wireshark Lua 解析器 utf16 字符串
Wireshark Lua dissector utf16 string
我正在编写自定义 Wireshark Lua 解析器。解析器中的一个字段是 UTF16 字符串。我试图用
指定这个字段
msg_f = ProtoField.string("mydissector.msg", "msg", base.UNICODE)
local getMsg = buffer(13) -- starting on byte 13
subtree:add_le(m.msg_f, getMsg)
但是,这只会添加第一个字符而不是整个字符串。它还会引发专家信息警告未解码 trailing/stray 个字符。
解析 UTF16 字符串的正确方法是什么?
您没有指定组成字符串的范围字节。这通常由显式长度字段或 NULL 终止符确定。确定范围的确切方法取决于所讨论的特定协议和字段。
每种类型的示例:
- 如果有一个长度字段,比如说字符串前面的 1 个字节的长度,那么您可以使用类似的东西:
local str_len = buffer(13, 1):le_uint()
subtree:add_le(m.msg_len_f, buffer(13))
if str_len > 0 then
subtree:add_le(m.msg_f, buffer(14, str_len))
end
- 如果字符串以 NULL 结尾,您可以使用类似的东西:
local str = buffer(13):stringz()
local str_len = str:len()
subtree:add_le(m.msg_f, buffer(13, str_len + 1))
这些只是伪示例,因此您需要应用任何方法(可能 none)来拟合您的数据。
请参阅 Wireshark's Lua API Reference Manual for more details, or to the Wireshark LuaAPI 维基页面。
我想到的解决方案很简单:
msg_f = ProtoField.string("mydissector.msg", "msg")
local getMsg = buffer(13) -- starting on byte 13
local msg = getMsg:le_ustring()
subtree:add(msg_f, getMsg, msg)
我正在编写自定义 Wireshark Lua 解析器。解析器中的一个字段是 UTF16 字符串。我试图用
指定这个字段msg_f = ProtoField.string("mydissector.msg", "msg", base.UNICODE)
local getMsg = buffer(13) -- starting on byte 13
subtree:add_le(m.msg_f, getMsg)
但是,这只会添加第一个字符而不是整个字符串。它还会引发专家信息警告未解码 trailing/stray 个字符。
解析 UTF16 字符串的正确方法是什么?
您没有指定组成字符串的范围字节。这通常由显式长度字段或 NULL 终止符确定。确定范围的确切方法取决于所讨论的特定协议和字段。
每种类型的示例:
- 如果有一个长度字段,比如说字符串前面的 1 个字节的长度,那么您可以使用类似的东西:
local str_len = buffer(13, 1):le_uint() subtree:add_le(m.msg_len_f, buffer(13)) if str_len > 0 then subtree:add_le(m.msg_f, buffer(14, str_len)) end
- 如果字符串以 NULL 结尾,您可以使用类似的东西:
local str = buffer(13):stringz() local str_len = str:len() subtree:add_le(m.msg_f, buffer(13, str_len + 1))
这些只是伪示例,因此您需要应用任何方法(可能 none)来拟合您的数据。
请参阅 Wireshark's Lua API Reference Manual for more details, or to the Wireshark LuaAPI 维基页面。
我想到的解决方案很简单:
msg_f = ProtoField.string("mydissector.msg", "msg")
local getMsg = buffer(13) -- starting on byte 13
local msg = getMsg:le_ustring()
subtree:add(msg_f, getMsg, msg)