Wireshark - 如何使用 Wireshark 观察字节顺序中小端和大端的差异?

Wireshark - 如何使用 Wireshark 观察字节顺序中小端和大端的差异?

我编写了一个使用 UDP 套接字进行通信的简单应用程序(使用 C 语言)。应用程序很简单:客户端将数字发送到服务器,然后服务器计算这些数字的总和。

现在,我知道如何捕获客户端和服务器交换的数据包,但我想知道如何使用 Wireshark 观察数据包的小端字节序和大端字节序之间的差异?

答案1

在 Wireshark 无法识别的协议上,您将只看到带有“未解析”有效负载字段的 TCP 或 UDP 数据包。如果协议“被”Wireshark 识别(BOOTP、DHCP、DNS、SMB、HTML 等等),您将看到 Wireshark“塑造”了 TCP/UDP 有效负载区域,显示相应的可识别的更高级别协议字段。

Wireshark 包含许多dissectors众所周知的协议,如果您想以格式化的方式显示特定协议负载,您可以创建自己的协议;请参阅此处。 https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html

在您的情况下,您的解剖器可以处理特定字段的“字节顺序”,处理允许的值。

请考虑字节序列就是这样,另一方面,“字节顺序”是将特定字节序列转换为数字的几个嵌套数字信息表示层(如字节大小、有符号/无符号、整数/浮点数等)中的第一个。

答案2

无法识别数字是以大端还是小端发送的,除非对数字有一些非常严格的限制,使得它们只能以一种方式理解,这意味着如果以错误的方式理解,则会太大或太小。

执行此类操作的标准方法是将标头附加到数据包中,以提供有关其内容的信息,例如其有效负载是大端还是小端。或者,您可以让数据包始终以大端或小端发送,发送方和接收方可以根据需要动态交换字节。

请记住,正如维基百科所说的用户数据报协议

它没有握手对话,因此将用户的程序暴露给底层网络的任何不可靠性:没有交付、排序或重复保护的保证。

UDP 主要用于数据流传输但所有数据包的传输并不重要的情况。例如,安全摄像头发送视频时,如果视频到达时损坏或无序,则丢失几帧是可以接受的。

执行数字求和的服务器不是 UDP 的最佳候选,因为如果数据包丢失或损坏,则求和结果就是错误的。 TCP保证正确交付的协议是首选。在 UDP 流中构建故障安全措施后,您很快就会发现自己正在重新发明 TCP。

跟踪传入消息的最简单解决方案是让您的服务器选择性地将信息打印到控制台。这可以通过调用时指定的参数或调试预处理器指令(C/C++ 的 #ifdef)来控制。

答案3

观察为您描述细分的部分中的值,并与原始十六进制进行比较。查看大于一个字节的字段,并查看原始十六进制中是小端还是大端。即细分中的 val(16) 和十六进制转储(因为它是一个 2 字节字段)显示:大端显示 00 10,小端显示 10 00。希望对您有所帮助。

相关内容