这几天,我正在学习如何使用Lua编写WireShark plugin.But --我不知道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发布于 2019-04-04 14:54:28
无线电视是一个Testy虚拟缓冲器。
Tvb (“”)表示数据包的缓冲区。它作为参数传递给侦听器和分解器,并可用于从数据包的数据中提取信息(通过TvbRange)。请注意,Tvbs仅可由当前侦听器或分解调用使用,并且在侦听器/分解器返回时立即被销毁,因此一旦函数返回,对它们的引用就无法使用。
作为tvb(偏移)的调用返回TvbRange
用于提取数据的Tvb中的字节范围。TvbRange是从
tvb:__call()或tvb:range([offset] [,length])创建的。
备注:无线电视是一张Lua表。如果您像tvb()一样调用它,就会调用__call() 元法。
tvb:__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)将返回该元方法的返回值。
tvb:__tostring() 描述 获取Tvb的字符串表示形式。不能直接呼叫。 返回 string :字符串表示形式
https://stackoverflow.com/questions/55510128
复制相似问题