DTLS 解密成功后无法在wireshark 中解码COAP 数据包

问题描述

我正在尝试调试 LWM2M 协议问题。我需要知道 COAP 服务器和 COAP 客户端之间传输了哪些消息。由于流量是使用 DTLS 加密的,我需要在 wireshark 中提供预共享密钥以查看有效负载。 Wireshark 成功解密了有效负载,但我看不到底层 COAP 协议消息。我只看到原始数据(“应用程序数据”):

enter image description here

enter image description here

但是当我尝试在虚拟设置中嗅探未加密的 COAP 流量时,我可以正确地看到 COAP 消息:

enter image description here

加密后如何使用wireshark查看COAP协议流量?

解决方法

问题是您对 COAPS 使用了非标准端口号而不是 IANA-registered port of 5684,而 Wireshark COAP 解剖器的 proto_reg_handoff_coap() 函数仅注册到具有该固定的非标准的 DTLS 解剖器- 可配置端口 (DEFAULT_COAPS_PORT)。有一些可能的方法来解决这个问题和/或解决它。

  1. 如果可能,请将您的应用程序更改为使用标准端口 5684。

  2. 修改 Wireshark COAP 解析器以使用您想要的端口注册到 DTLS 解析器,或者更好的是允许端口可配置,甚至可以使用端口范围首选项来允许注册多个端口。您可以参考 Wireshark Developer's Guide 以了解有关在您的特定平台上为 Wireshark 进行编译和开发的信息。

  3. 提交 Wireshark Issue,要求对 COAP 解析器进行增强,以允许可配置 DTLS 注册端口。同样,范围偏好可能会更好,因为它允许注册的端口不止 1 个。

  4. 假设第一个选项是不可能的,而其他选项将花费更长的时间并且不能解决将有效载荷分解为现有捕获文件的 COAP 的直接问题,您可以使用诸如 {{3} }(或其他类似的 TraceWrangler 工具)将所有数据包的 UDP 端口值 57845 重写为 5684。这应该允许有效载荷传递到 COAP 解剖器,而无需任何其他更改。如果您确实使用 TraceWrangler,那么基本步骤是:

    • 添加文件:选择您的文件,即 file.pcapng
    • 任务名称:匿名文件。
    • 有效负载:取消选择“删除所有未知层...”,因为您要保留所有内容。
    • PCAPng:Action=Passthrough,因为这里不需要替换原始评论。
    • 第 4 层,UDP:操作 = 替换。选择“按列表替换 UDP 端口”,然后选择添加原始端口号输入57845,替换端口号输入5684,然后点击添加
    • 选择好的
    • 选择运行
    • 状态指示“任务完成”时,您应该能够在 Wireshark 中打开新创建的名为 file_anon.pcapng 的数据包捕获文件并Wireshark 现在应该将负载识别为 COAP。

免责声明:我自己没有测试过,但它应该工作。