【MQTT学习笔记六】通过Wireshark去抓取和分析MQTT消息

  Wireshark默认是只显示到TCP层,要分析MQTT的消息,需要先安装插件。参考:https://blog.csdn.net/yannanxiu/article/details/71310723

  懒得去看的同学可以直接按照以下步骤操作:

1)下载generic.dll:http://wsgd.free.fr/download.html,放到Wireshark的C:\Program Files\Wireshark\plugins\2.4.4目录下

2)下载MQTT规则文件:http://false.ekta.is/2011/06/mqtt-dissector-decoder-for-wireshark/#,放到Wireshark主目录C:\Program Files\Wireshark 下

3)运行Wireshark就可以了。可以在过滤器中直接输入mqttv31或者ip来过滤MQTT的协议消息

MQTT报文是包在TCP中,作为TCP的payload出现的,具体分析的时候要清楚MQTT各种报文中各个字节的含义。

connect

固定报头:

10 表示:connect报文

3b表示:剩余长度59

可变报头:

00 04 4d 51 54 54表示:MQTT

04 表示:协议级别,3.1默认为4

02表示:连接标志

【0000 0010:8个bit分别表示不需要用户名,不需要密码,不保留遗嘱消息,遗嘱的QoS没有遗嘱所以两位为0,遗嘱标志为0,清理会话,保留位】

00 14 表示:保持连接时间为20s,非0情况下,1.5倍时间内没有收到客户端控制保温,则必须断开连接。0表示连接不会断开

有效载荷:

Client id

CONNACK

固定头

20:CONNACK报文

02:剩余长度2

可变头

00:连接确认标志,其中高7位保留,第0位表示当前会话标志,CONNECT中Clean Session为1,所以第0位为0;如果Clean Session为0,服务端保存了会话状态,第0位为1,没保存,则为0

00:连接返回码,0表示连接成功

PUBLISH

固定头

30:PUBLISH报文,不重发,QOS=0

【0011 0000:高4位是PUBLISH报文,第三位是DUP重发标志,为1表示可能是一个早前报文的重发,第2和1位为QOS,第0位保留标志,表示服务器不必存储这个应用消息和它的QOS,如果为1,服务器需保存且分发给未来匹配主题的订阅者】

F2 01:长度为128+114=242

可变头

00 20:订阅主题长度,32个字节

65~73:订阅主题

有效荷载

5b~5d:载荷

 

SUBSCRIBE

固定头

82:SUBSCRIBE报文,8表示订阅报文,2表示0010,固定flag

25:剩余长度为37

可变头

00 01:报文标识符

00 20:长度MSB和LSB,32个字节

65~73:主题过滤器

00:QOS等级

 

SUBACK

固定头

90:SUBACK报文

03:剩余长度

00 01:报文标识符,对应上面SUBSCRIBE的,订阅请求和回复的报文标识符必须一致,不能在不同报文中存在相同的报文标识符。使用完可以释放复用。

00:授予QOS为0

【0000 0000:第7位为1表示订阅失败,第1和0位表示授予的QOS等级】

PINGREQ

C0:PINGREQ报文

00:剩余长度为0

PINGRESP

D0: 心跳响应报文

00: 剩余长度0

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值