首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Wireshark Dis界别中将用户数据转换为十六进制

在Wireshark Dis界别中将用户数据转换为十六进制
EN

Stack Overflow用户
提问于 2020-06-07 04:17:15
回答 1查看 1.4K关注 0票数 2

我正在编写Wireshark Dissector脚本。

如何将userdata转换为十六进制字符串?

我想要输出像这样的0102030405060708000a0b0c0d0e0f10

我可以使用tostring转换十六进制字符串。

但它忽略了长数据。输出图像

如何在不忽略长数据的情况下将userdata转换为十六进制字符串?

代码语言:javascript
复制
proto = Proto("Test", "My Test Protocol")

function proto.dissector(buffer, pinfo, tree)
  print(tostring(buffer()))
  -- "userdata"
  -- print(type(buffer()))
end

tcp_table = DissectorTable.get("tcp.port")
tcp_table:add(1234, proto)

环境

  • Wireshark 3.2.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 07:49:17

我对Wireshark不是很熟悉,但是快速查看一下手册,我得到的缓冲区是无线电视

buffer()与返回TvbRangebuffer:range()等效

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

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

打印一个TvbRange被截断为24个字节。

我将尝试从您的Tvb中获取一个ByteArray,并使用以下方法获取ByteArray的十六进制字符串

11.8.1.14bytearray:tohex([lowercase], [separator])以十六进制的形式获取ByteArray中字节的Lua字符串,并使用给定的分隔符。

所以您的代码可能看起来像

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62240784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档