gpt4 book ai didi

lua - wireshark lua 字符串 :byte() error

转载 作者:行者123 更新时间:2023-12-04 14:21:03 28 4
gpt4 key购买 nike

我在编写 lua 解析器时遇到了字符串问题。我的数据包看起来像:

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

调试时tvb看起来一样

enter image description here

偏移 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...

小值是正确的,比如 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:string 来满足您的需求,但我找不到任何好的引用。

关于lua - wireshark lua 字符串 :byte() error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35221316/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com