如何在 Wireshark 的 Lua 脚本中从用户数据中创建 tvb 范围对象

我正在撰写一个用于解析自定义协议的 Lua 脚本。该协议将一些数据编码在不到 8 位的数据中。我希望仍然能够在 Wireshark 中突出显示数据来自哪些字节。

如果我使用 tree:add(Protofield, tvb:range),则会突出显示字节,因为我认为突出显示字节的信息来自 tvb 范围。

但如果我在将数据馈入树之前对其进行操作,以普通 int 形式而不是作为 tvb 范围,那么字节将不会被突出显示。 tree 无法知道 ...

是否有一种选项可以从纯数据中创建范围对象?

或者作为替代:是否有一种方法可以传递 tree:add 函数要突出显示的字节?

local detections = 22;
subsubtree:add_le(TimeLag, tvb_sub_buffer(6,4)) -- 突出显示字节
subsubtree:add_le(Detections, detections) -- 没有突出显示字节

感谢帮助!

点赞
用户2755698
用户2755698

如果您想要突出显示字节并操作来自这些字节的数据,可以使用类似以下内容的代码:

subsubtree:add_le(TimeLag, tvb_sub_buffer(6,4))

local detections = manipulate_detections(tvb_sub_buffer(10,2):le_uint())
subsubtree:add_le(Detections, tvb_sub_buffer(10,2)):set_text("Detections: " .. detections)

或者,您可以进一步格式化字符串,例如:

subsubtree:add_le(Detections, tvb_sub_buffer(10,2)):set_text(string.format("Detections: %d", detections))

有关向解剖树添加信息的更多信息,请参见Wireshark开发人员指南章节11.7,有关string.format()和相关工具的更多信息,请参见《Programming in Lua》书的第20章-String Library

2019-04-26 19:27:30