Wireshark Tvb 中使用的 Lua 语法是什么
what's the Lua syntax used in Wireshak Tvb
在 Wireshark Lua 解析器页面中:
https://wiki.wireshark.org/Lua/Dissectors
它说:
TvbRange 表示 Tvb 的可用范围,用于从生成它的 Tvb 中提取数据。
TvbRanges 是通过调用 Tvb(例如 'tvb(offset,length)')创建的。如果 TvbRange 跨度超出 Tvb 的范围,创建将导致运行时错误。
-- trivial protocol example
-- declare our protocol
trivial_proto = Proto("trivial","Trivial Protocol")
-- create a function to dissect it
function trivial_proto.dissector(buffer,pinfo,tree)
pinfo.cols.protocol = "TRIVIAL"
local subtree = tree:add(trivial_proto,buffer(),"Trivial Protocol Data")
subtree:add(buffer(0,2),"The first two bytes: " .. buffer(0,2):uint())
subtree = subtree:add(buffer(2,2),"The next two bytes")
subtree:add(buffer(2,1),"The 3rd byte: " .. buffer(2,1):uint())
subtree:add(buffer(3,1),"The 4th byte: " .. buffer(3,1):uint())
end
-- load the udp.port table
udp_table = DissectorTable.get("udp.port")
-- register our protocol to handle udp port 7777
udp_table:add(7777,trivial_proto)
表达式 "buffer(2,1)" 从 Tvb 对象创建一个 TvbRanges,lua 的语法是什么?
在这里,我们将两个参数传递给一个对象,而不是一个函数,什么意思,如何实现?
当您尝试调用不是函数的东西时,Lua 会在其上查找 __call
元方法,如果存在则调用它。对于这个特定的对象,https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tvb.html#lua_fn_tvb___call__ 表示它等同于对其调用 :range()
方法,例如,您可以将 buffer(2,2)
替换为 buffer:range(2,2)
。
在 Wireshark Lua 解析器页面中: https://wiki.wireshark.org/Lua/Dissectors
它说: TvbRange 表示 Tvb 的可用范围,用于从生成它的 Tvb 中提取数据。 TvbRanges 是通过调用 Tvb(例如 'tvb(offset,length)')创建的。如果 TvbRange 跨度超出 Tvb 的范围,创建将导致运行时错误。
-- trivial protocol example
-- declare our protocol
trivial_proto = Proto("trivial","Trivial Protocol")
-- create a function to dissect it
function trivial_proto.dissector(buffer,pinfo,tree)
pinfo.cols.protocol = "TRIVIAL"
local subtree = tree:add(trivial_proto,buffer(),"Trivial Protocol Data")
subtree:add(buffer(0,2),"The first two bytes: " .. buffer(0,2):uint())
subtree = subtree:add(buffer(2,2),"The next two bytes")
subtree:add(buffer(2,1),"The 3rd byte: " .. buffer(2,1):uint())
subtree:add(buffer(3,1),"The 4th byte: " .. buffer(3,1):uint())
end
-- load the udp.port table
udp_table = DissectorTable.get("udp.port")
-- register our protocol to handle udp port 7777
udp_table:add(7777,trivial_proto)
表达式 "buffer(2,1)" 从 Tvb 对象创建一个 TvbRanges,lua 的语法是什么? 在这里,我们将两个参数传递给一个对象,而不是一个函数,什么意思,如何实现?
当您尝试调用不是函数的东西时,Lua 会在其上查找 __call
元方法,如果存在则调用它。对于这个特定的对象,https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tvb.html#lua_fn_tvb___call__ 表示它等同于对其调用 :range()
方法,例如,您可以将 buffer(2,2)
替换为 buffer:range(2,2)
。