我正在尝试调试 LWM2M 协议问题。我需要知道 COAP 服务器和 COAP 客户端之间传输了哪些消息。由于流量是使用 DTLS 加密的,我需要在 Wireshark 中提供预共享密钥才能查看有效负载。Wireshark 成功解密了有效载荷,但我看不到底层 COAP 协议消息。我只看到原始数据(“应用程序数据”):
但是当我尝试在虚拟设置上嗅探未加密的 COAP 流量时,我可以正确看到 COAP 消息:
加密后如何使用wireshark查看COAP协议流量?
问题是您使用 COAPS 的非标准端口号而不是IANA 注册的端口 5684,并且 Wireshark COAP 解析器的proto_reg_handoff_coap()
功能仅使用该固定的、不可配置的端口 ( ) 注册到 DTLS 解析器DEFAULT_COAPS_PORT
。有一些可能的方法来解决这个问题和/或解决它。
如果可能,请将您的应用程序更改为使用标准端口 5684。
修改 Wireshark COAP 解析器以使用所需的端口也注册到 DTLS 解析器,或者更好地允许端口可配置,甚至可以使用端口范围首选项来允许注册多个端口。您可以参考Wireshark 开发人员指南,了解有关在特定平台上为 Wireshark 编译和开发的信息。
提交Wireshark 问题,要求增强 COAP 解析器以允许可配置 DTLS 注册端口。同样,范围偏好可能会更好,因为它允许注册的端口不止一个。
假设第一个选项是不可能的并且其他选项将花费更长的时间并且不能解决将有效负载作为 COAP 剖析为现有捕获文件的直接问题,您可以使用诸如TraceWrangler 之类的程序(或其他此类捕获文件编辑器和/或匿名工具)将所有数据包的 UDP 端口值 57845 重写为 5684。这应该允许将有效负载传递给 COAP 解析器,而无需进行任何其他更改。如果您确实使用TraceWrangler,那么基本步骤将是:
file.pcapng
.file_anon.pcapng
在 Wireshark 中打开新创建的名为 的数据包捕获文件,并且 Wireshark 现在应该将有效负载识别为 COAP。免责声明:我自己没有对此进行测试,但它应该可以工作。