Lua 在Wireshark解析器中将Userdata转换为十六进制

Lua 在Wireshark解析器中将Userdata转换为十六进制,lua,wireshark,wireshark-dissector,lua-userdata,Lua,Wireshark,Wireshark Dissector,Lua Userdata,我现在正在编写Wireshark解析器lua脚本 如何将userdata转换为十六进制字符串? 我想得到这样的输出0102030405060708000a0b0c0d0e0f10 我可以使用tostring转换十六进制字符串 但它忽略了长数据。 如何将userdata转换为十六进制字符串而不忽略长数据 proto=proto(“测试”,“我的测试协议”) 函数原型剖析器(缓冲区、pinfo、树) 打印(tostring(buffer())) --“用户数据” --打印(类型(缓冲区()) 结束

我现在正在编写Wireshark解析器lua脚本

如何将
userdata
转换为十六进制字符串?
我想得到这样的输出
0102030405060708000a0b0c0d0e0f10

我可以使用
tostring
转换十六进制字符串
但它忽略了长数据。

如何将
userdata
转换为十六进制字符串而不忽略长数据

proto=proto(“测试”,“我的测试协议”)
函数原型剖析器(缓冲区、pinfo、树)
打印(tostring(buffer()))
--“用户数据”
--打印(类型(缓冲区())
结束
tcp_table=DissectorTable.get(“tcp.port”)
tcp_表:添加(1234,proto)
环境
  • Wireshark 3.2.1

我对Wireshark不是很熟悉,但通过快速查看手册,我发现缓冲区是

buffer()
相当于
buffer:range()
,它返回一个

有一个Tvb:_tostring函数,它声称

将Tvb的字节转换为字符串。这主要适用于以下情况: 调试目的,因为如果字符串太长,它将被截断 长

打印TvbRange会被截断为24字节

我会试着从你的Tvb获取a,然后用

11.8.1.14
bytearray:tohex([小写],[分隔符])
获取bytearray中以十六进制ascii表示的Lua字节字符串,并使用给定的分隔符

因此,您的代码可能看起来像

proto = Proto("Test", "My Test Protocol")
function proto.dissector(buffer, pinfo, tree)
  print(buffer:bytes():tohex())
  -- or print(buffer():bytes():tohex())
  -- but I guess if you don't give a range in buffer()
  -- it will be pretty much the same as buffer.
end