Wireshark Lua解剖器utf16字符串



我正在编写一个自定义的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)

但是,这只会添加第一个字符,而不是整个字符串。它还引发了一个专家信息警告未编码的尾随/杂散字符。

解析UTF16字符串的正确方法是什么?

您尚未指定包含字符串的字节范围。这通常由显式长度字段或NULL终止符来确定。确定范围的确切方法取决于所讨论的特定协议和字段。

每种类型的示例:

  • 如果有一个长度字段,比如字符串前面的长度为1字节,那么您可以使用以下内容:
local str_len=缓冲区(13,1(:le_uint((子树:add_le(m.msg_len_f,缓冲区(13((如果str_len>0,则子树:add_le(m.msg_f,缓冲区(14,str_len((end
  • 如果字符串以NULL结尾,则可以使用以下内容:
local str=buffer(13(:字符串((local str_len=str:len((subtree:add_le(m.msg_f,buffer(13,str_len+1((

这些只是伪示例,所以您需要应用任何方法,可能都不应用这些方法来适应您的数据。

有关更多详细信息,请参阅Wireshark的Lua API参考手册,或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)

最新更新