“ tvb(offset):string()”是什么意思?

时间:2019-04-04 07:27:15

标签: lua wireshark

这几天,我正在学习如何使用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

1 个答案:

答案 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:字符串表示形式