Wireshark Lua中string.byte()错误如何修正,能否提供详细长尾词解答?

2026-03-31 22:381阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计442个文字,预计阅读时间需要2分钟。

Wireshark Lua中string.byte()错误如何修正,能否提供详细长尾词解答?

我在写Lua解析器时遇到了字符串问题。我的数据包看起来像这样:0000 00 00 00 69 00 10 00 01 00 00 00 ed 00 00 00 0c0010 bf a6 5f ...。调试时,tvb显示0x10处的字节是0xbf,但在我解析器的函数中,我得到的是。

我写lua解剖器时遇到字符串问题.我的数据包看起来像:

0000 00 00 00 69 00 10 00 01 00 00 00 ed 00 00 00 0c 0010 bf a6 5f ...

调试时,tvb看起来一样

偏移量0x10处的字节是0xbf,但在我的解剖器函数中,我得到了不同的结果,这里是我的代码:

local str = buf(0x10):string() local x = string.byte(str, 1)

变量x应该是0xbf,但它是0xef,而其他一些偏移量也是0xef:

local str = buf(0x11):string() local x = string.byte(str, 1) -- also get 0xef, should be 0xa6 local str = buf(11):string() local x = string.byte(str, 1) -- also get 0xef, should be 0xed

似乎大值总是会得到0xef,如0xa6 / 0xbf / 0xed …

Wireshark Lua中string.byte()错误如何修正,能否提供详细长尾词解答?

小值将是正确的,如0x69 / 0x5f / 0x0c …

我正在使用最新的wireshark 2.0,这是一个错误吗?

我对Wireshark的了解并不多,但我很清楚发生了什么.

您正在使用Wireshark的tvbrange:string([encoding])函数.我在Wireshark网站上找到的文档说默认编码是ENC_ASCII. 0x80-0xFF(您报告的问题)范围内的字节不是有效的ASCII.

Wireshark可能正在做的是将这些转换为U FFFD,Unicode的“替换字符”.这是在Unicode字符串中表示未知字符的标准做法.

然后,Wireshark可能在返回Lua时将此字符串编码为UTF-8. U FFFD的UTF-8编码的第一个字节是0xEF,这就是你所看到的.

如果你想从TVB获取原始字节值,可以尝试使用tvbrange:bytes([encoding])函数来获取值.例如

local bytes = buf(0x10):bytes() local x = bytes:get_index(0) -- maybe 1, I'm not sure if it would be 0 or 1 indexed

也可能有一些编码你可以传递给tvbrange:字符串可以做你想要的,但我找不到任何好的参考.

本文共计442个文字,预计阅读时间需要2分钟。

Wireshark Lua中string.byte()错误如何修正,能否提供详细长尾词解答?

我在写Lua解析器时遇到了字符串问题。我的数据包看起来像这样:0000 00 00 00 69 00 10 00 01 00 00 00 ed 00 00 00 0c0010 bf a6 5f ...。调试时,tvb显示0x10处的字节是0xbf,但在我解析器的函数中,我得到的是。

我写lua解剖器时遇到字符串问题.我的数据包看起来像:

0000 00 00 00 69 00 10 00 01 00 00 00 ed 00 00 00 0c 0010 bf a6 5f ...

调试时,tvb看起来一样

偏移量0x10处的字节是0xbf,但在我的解剖器函数中,我得到了不同的结果,这里是我的代码:

local str = buf(0x10):string() local x = string.byte(str, 1)

变量x应该是0xbf,但它是0xef,而其他一些偏移量也是0xef:

local str = buf(0x11):string() local x = string.byte(str, 1) -- also get 0xef, should be 0xa6 local str = buf(11):string() local x = string.byte(str, 1) -- also get 0xef, should be 0xed

似乎大值总是会得到0xef,如0xa6 / 0xbf / 0xed …

Wireshark Lua中string.byte()错误如何修正,能否提供详细长尾词解答?

小值将是正确的,如0x69 / 0x5f / 0x0c …

我正在使用最新的wireshark 2.0,这是一个错误吗?

我对Wireshark的了解并不多,但我很清楚发生了什么.

您正在使用Wireshark的tvbrange:string([encoding])函数.我在Wireshark网站上找到的文档说默认编码是ENC_ASCII. 0x80-0xFF(您报告的问题)范围内的字节不是有效的ASCII.

Wireshark可能正在做的是将这些转换为U FFFD,Unicode的“替换字符”.这是在Unicode字符串中表示未知字符的标准做法.

然后,Wireshark可能在返回Lua时将此字符串编码为UTF-8. U FFFD的UTF-8编码的第一个字节是0xEF,这就是你所看到的.

如果你想从TVB获取原始字节值,可以尝试使用tvbrange:bytes([encoding])函数来获取值.例如

local bytes = buf(0x10):bytes() local x = bytes:get_index(0) -- maybe 1, I'm not sure if it would be 0 or 1 indexed

也可能有一些编码你可以传递给tvbrange:字符串可以做你想要的,但我找不到任何好的参考.