wireshark lua string:byte()错误

前端之家收集整理的这篇文章主要介绍了wireshark lua string:byte()错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我写lua解剖器时遇到字符串问题.我的数据包看起来像:

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

调试时,tvb看起来一样

enter image description here

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

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

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

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

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

小值将是正确的,如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])函数获取值.例如

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

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

猜你在找的Lua相关文章