这几天,我正在学习如何使用Lua编写WireShark插件。但是我不知道tvb(offset):string
是什么意思。为什么tostring(tvb(offset))
使用有误?谢谢您的回答
function weibo.dissector(tvb, pinfo, tree)
local proto_type = tvb(23, 1):uint();
if(proto_type ~= 0x06) then
return
end
local offset = get_payload_offset(tvb, proto_type)
local data = tvb(offset):string();
local i, j = string.find(data, "weibo")
if(i) then
pinfo.cols.protocol = weibo.name
local subtree = tree:add(weibo, tvb(offset+i-1))
subtree:append_text(", ptn_pos: " .. i .. "-" .. j)
end
end
答案 0 :(得分:2)
tvb是Testy Virtual Buffer。
Tvb(“虚拟虚拟缓冲区”)代表数据包的缓冲区。它是 作为参数传递给侦听器和解剖器,可以用来 从数据包的数据中提取信息(通过TvbRange)。当心 电视只能由当前的侦听器或解剖器调用使用,并且 侦听器/解析器返回后立即销毁,因此对 函数返回后,它们将不可用。
以tvb(offset)调用将返回TvbRange
Tvb中用于提取数据的字节范围。 TvbRange 是从
tvb:__call()
或tvb:range([offset] [,length])
创建的。
备注:
电视是Lua表。如果您像tvb()
这样调用,则会调用__call()
metamethod。
https://wiki.wireshark.org/LuaAPI/Tvb#tvb:__call.28.29
电视:__ call()
说明
从该Tvb的子集创建一个TvbRange。与tvb:range()相同。 无法直接调用。
返回
userdata:新的TvbRange
TvbRange的众多方法之一是tvbrange:string()
tvbrange:string()
说明
从TvbRange获取一个字符串
返回
string:字符串,包含TvbRange中的所有字节,包括 全零(例如,“ a \ 000bc \ 000”)
tostring()是Lua的标准功能之一。
来自https://www.lua.org/manual/5.3/manual.html#pdf-tostring
接收任何类型的值,并将其转换为字符串 人类可读的格式。 (用于完全控制数字的数量 转换后,请使用
string.format
。)如果v的元表具有__tostring
字段,然后tostring以v作为参数调用相应的值, 并将通话结果用作通话结果。
当tvb实现__tostring() tostring(tvb)
时,将返回该元方法的返回值。
电视:__ tostring()
说明
获取Tvb的字符串表示形式。无法直接调用。
返回
string:字符串表示形式