wireshark 捕获的 ascii 窗口有很多点 (.)。它们到底是什么意思?这些点暗示了什么信息?
答案1
这些点暗示了什么信息?
它们代表不可打印的字符 - 诸如换行符、回车符、EOF、NUL 等等。您可以查看相应的十六进制代码(左侧)来确定实际的字节是什么。
请考虑此示例,其中显示从 HTTPS 服务器到客户端的“证书”数据包。“证书”TLS 消息包含二进制和文本数据;文本来自证书本身:
请注意,我选择了“证书长度”字段,它显示证书的长度为 1336 字节。但是,如果您查看突出显示的字节,右侧的“文本”中显示的不是“1336”,而是“..8”。这是因为“..8”是 0x000538 的 ASCII 表示。
如果你看ASCII 表,您会看到 0x00 是“NUL(空字符)”,0x05 是“ENQ(查询)”,而 0x38 是“8”。NUL 和 ENQ 是不可打印的 - 它们无法显示 - 因此 Wireshark 会打印“。”。
但在底层协议中,这些无论如何都不是文本。它是一个 24 位整数 - 十六进制的 000538 等于十进制的 1336,表示以下证书长度为 1336 字节。
进一步深入研究,一旦证书启动,我们就会看到普通 ASCII 文本数据(“Entrust, Inc.”)与二进制非文本数据(“..U...0”)混合在一起。
即使使用完全“基于文本”的协议(如 HTTP),您也会看到“.”表示不可打印字符。请注意“Connection: close”后面的“..”,它对应于“回车符 - 换行符”(CRLF 或 \r\n):
这意味着 wireshark 使用 ascii 来解码位字符串?为什么不使用像 unicode 这样可以理解所有文本(无论语言)的东西呢?
简而言之,Wireshark 仅显示字节,这些字节可能是也可能不是文本,但如果它们是文本,则它们可能是 ASCII 而不是 Unicode。
Wireshark 将数据字节(字符串和二进制)显示为 ASCII 字符,其中“.”用于表示任何不可打印字符。有许多网络协议使用 ASCII 字符进行通信 - FTP、SMTP、Telnet、HTTP、IRC 等。如果网络协议使用文本进行通信,那么它几乎肯定使用 ASCII。
我不熟悉任何使用 UTF/Unicode 作为通信基础的协议。任何希望以 Unicode 进行通信的协议(例如 HTTP)数据将会发出信号在应用层后面的字节将被解释为 Unicode。(我不确定,但我希望存在能够捕获并正确显示的 Wireshark 解释器,但它们仍会在“数据包字节”窗口中显示 ASCII,因为这就是那些字节 - 8 位单位 - 最好以 8 位文本格式(如 ASCII)显示。)