CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持。
既然CoAP是基于UDP来组包的,那肯定是可以实现。
所以这篇文章给研究 CoAP 的伙伴们带来我琢磨出的一套手动组包调试方案。虽然效率不高,但至少能用。而且一个显而易见的好处是,它将使我们加深对 CoAP 消息格式的理解。
小能手正在学习 CoAP 协议,CoAP协议学习笔记可点此查看。
在1.2 一张表了解 CoAP 协议中,本能手额外提及了官方的示例,协议最后的附录中有给了3个很好的示例。
我们先拿官方的示例练练手。
我们把查询温度的示例转成字节流:
Ver:01 T=0 TKL=0 // 0x40
Code=0.01 // 0x01
MID// 0x7D 34
Option No=11(Uni-Path) len=11 value="temperature"(0x74 65 6D 70 65 72 61 74 75 72 65) // 0xBB 0x74 65 6D 70 65 72 61 74 75 72 65
因此字节流是:
40 01 7D 34 BB 74 65 6D 70 65 72 61 74 75 72 65
刚组了一个小包,现在来往一个真实 CoAP 服务器组个包试试。
http://coap.me/
Access CoAP nodes via HTTP, analyze pcaps (tcpdump/wireshark packet capture files) and run the ETSI interoperability tests against your server on this simple interactive website.
在这个网站上,可以跑一些 ETSI 的操作示例,另外 coap://coap.me 这个服务器也支持 CoAP 调试。
ping 了下 http://coap.me/,得到它的 IP 。
>ping coap.me
正在 Ping coap.me [134.102.218.18] 具有 32 字节的数据:
来自 134.102.218.18 的回复: 字节=32 时间=289ms TTL=45
来自 134.102.218.18 的回复: 字节=32 时间=288ms TTL=45
来自 134.102.218.18 的回复: 字节=32 时间=303ms TTL=45
来自 134.102.218.18 的回复: 字节=32 时间=289ms TTL=45
接着,我们直接去 Get /test,整理如下:
Ver:01 T=0 TKL=2 // 0x42
Code=0.01 // 0x01
MID// 0x00 01
TOKEN = 22950// 0x595C
Option No=11(Uni-Path) len=4 value="test"(0x74 65 6D 70 65 72 61 74 75 72 65) // 0xB4 0x74 65 73 74
因此字节流是:
42 01 00 01 59 5C B4 74 65 73 74
一试就成功,本能手的内心一阵激动。
回复字节流如下:
62 45 00 01 59 5C 48 7C 38 F8 1A AF F8 7F F2 80 FF 77 65 6C 63 6F 6D 65 20 74 6F 20 74 68 65 20 45 54 53 49 20 70 6C 75 67 74 65 73 74 21 20 6C 61 73 74 20 63 68 61 6E 67 65 3A 20 32 30 31 38 2D 30 34 2D 32 35 20 30 36 3A 31 35 3A 30 35 20 55 54 43
逐个拆包:
62 // 01100010 VER=01 T=2(ACK) TKL=2
45 // 010 00101 Code=2.05(Content)
00 01 // MID=0x0001
59 5C // TOKEN=0x595C
48 // OptionNO=4(ETag) OptionLen=8
7C 38 F8 1A AF F8 7F F2 // Option:
80 // OptionNO=8(LocationPath)
FF // Marker
77 65 6C 63 6F 6D 65 20 74 6F 20 74 68 65 20 45 54 53 49 20 70 6C 75 67 74 65 73 74 21 20 6C 61 73 74 20 63 68 61 6E 67 65 3A 20 32 30 31 38 2D 30 34 2D 32 35 20 30 36 3A 31 35 3A 30 35 20 55 54 43
// welcome to the ETSI plugtest! last change: 2018-04-25 06:15:05 UTC
搞定回家,再见。