wireshark lua字符串:字节()错误

wireshark lua字符串:字节()错误

问题描述:

我写一个lua解剖器时出现字符串问题。我的包的样子:wireshark 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,但在我的解剖功能我得到不同的结果相同

enter image description here

字节,这里'我的代码:

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

the vari能够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 ...

而小值将是正确的,就像×69/0x5F的/ 0x0c ...

我使用的是最新的Wireshark 2.0,这是一个错误?

+1

什么是':string()'? – hjpotter92

+0

对不起,我没有解释清楚,发布更新。并且:string()是Wireshark内置函数,它将tvb转换为字符串 – aj3423

+0

尝试检查值:buf(0x10),buf(0x10):string()'。 – hjpotter92

我对Wireshark的了解并不多,但我有一个很好的想法。

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

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

然后,当返回到Lua时,Wireshark可能会将此字符串编码为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你想要什么,会做,但我找不到这方面的任何很好的参考。

+0

就是这样,使用':bytes()'解决问题。 – aj3423

假设buf指的是传递给解剖例程的参数,它的类型为Tvb。当你给它打电话时(如buf(0x10)),你创建一个TvbRange实例。他们两人都记录在这里: https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tvb.html

tehtmi是当场就为什么你得到错误结果的原因,tvbrange:string()返回使用ASCII编码(因为省略了编码参数)的字符串。

以获得原始字节缓冲器(而不是将其转换为ASCII或UTF-8字符串)的一种方式是:

local x = buf:raw(0x10, 1) 

(使用偏移16和长度为1)

如果考虑直接使用buf(0x10):raw(),请注意,由于某些原因,这将返回支持此Tvb的完整数据源。可能是一个错误或功能...解决方法:

local bytes = buf(0x10) 
local x = bytes:raw(bytes:offset(), bytes:len()) 
+0

谢谢,'raw'函数应该让事情变得更容易!我正在查看wiki上的文档,https://wiki.wireshark.org/LuaAPI/Tvb,它似乎没有提到'raw'。 – legoscia

+1

@legoscia Wireshark的Lua API参考手册始终比wiki更精确,因为它直接从Wireshark C代码的文档生成。另请参阅https://wiki.wireshark.org/LuaAPI顶部的注释 – Lekensteyn