OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32G070RB探测31-MQTT协议剖析1CONNECT②

共24条 1/3 1 2 3 跳转至

STM32G070RB探测31-MQTT协议剖析1CONNECT②

高工
2021-03-23 22:30:47    评分
这篇对照协议详细剖析一下上篇中的神秘报文这个需要打开MQTT 3.1.1协议说明对照着看了

先了解一下mqtt的MQTT 控制报文格式

三部分组成:

1.固定报头(所有控制报文都包含)

2.可变报头(部分控制报文包含)

3.有效载荷(部分控制报文包含)

其中固定报头是必须要有的

固定报头

固定报头也是三部分组成

1.控制报文类型

2.标志

3.剩余长度

其中的1,2为一个字节,控制报文类型为前4位标志为后四位

CONNECT的控制报文为1 标志位为0

所以第一个字节为10

看下之前抓的协议包里

对的上,证明是对的

然后就是剩余长度了,就是之后所有数据的长度

这个怎么计算呢,协议里给了个例子

321 = 65+2*128
即
321(十进制) = 0x41+0x02*0x80
所以剩余长度第一个字节等于0x41+0x80
第二个字节等于0x02
即 c1 02(十六进制)

是不是仿佛不明白? 再倒着推一遍

因为这个长度只有低7位是有效的,1个字节时,长度最长为0x7f,即127

而最高位则为延续位,当大于127时最高位为1,延续到第二位

当超过127时,比如129时,第一个字节最高位置1,第二个字节低七位为1,129-128=1,第一个字节低七位为1,即为11 01(十六进制) 拿上边的c1 02 推回去

2*128=256
0xc1-0x80=0x41=65
65+256=321

来看一下之前抓的协议包里

第一位0x92比0x80大,所以看第二位0x01比0x80小,所以到此结束 即剩余长度为92 01

再算一遍

(0x01*0x80)+(0x92-0x80) = 0x92 = 196(dec)

即长度为192,笨办法查一下

9*16+5-3 = 146

对的



助工
2021-03-24 00:02:40    评分
2楼

感谢楼主的分享,很实用了。


菜鸟
2021-03-24 00:21:11    评分
3楼

感谢楼主的分享,很实用了。


专家
2021-03-24 09:27:08    评分
4楼

楼主您这是使用什么抓包工具来操作的啊


专家
2021-03-24 11:43:05    评分
5楼

找到上一篇的内容了:

http://forum.eepw.com.cn/thread/349881/1


谢谢楼主了。


专家
2021-03-24 13:39:17    评分
6楼

看看了解一下


专家
2021-03-27 08:18:54    评分
7楼

有实用性


专家
2021-03-27 08:50:26    评分
8楼

学习MQTT


高工
2021-03-27 09:44:40    评分
9楼

实用


助工
2021-03-28 09:33:46    评分
10楼

有用。


共24条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]