使用wireshark分析mqtt数据

一开始直接过滤没有发现mqtt的协议(后来发现是开始捕获数据的时候,1883端口刚好没有数据),上网看了要加.lua脚本,加了不好用。有的博客说最新的wireshark不需要脚本,于是直接升级到了Version 3.2.2 (v3.2.2-0-ga3efece3d640)。由于端口问题和测试时间问题还是没有数据。看到别的博客要先设置端口,在wireshark的“编辑”-》“首选项”-》“Protocols”-》“MQTT”中设置端口,使用wireshark分析mqtt数据_第1张图片

然后就能看到过滤出mqtt协议的数据了(因为我是用网页发送mqtt数据,所以端口号是8083).后来把端口号修改成1883,服务启动之后也有数据了。

记录一下mqtt协议

1.两个byte的固定头

bit 7 6 5 4 3 2 1 0
byte 1 Message Type DUP flag QoS level RETAIN
byte 2 Remaining Length
  • 第一个byte4-7bit的意义:

 

名字

流向 描述
CONNECT 1 C->S 客户端请求与服务端建立连接
CONNACK 2 S->C 服务端确认连接建立
PUBLISH 3 CóS 发布消息
PUBACK 4 CóS 收到发布消息确认
PUBREC 5 CóS 发布消息收到
PUBREL 6 CóS 发布消息释放
PUBCOMP 7 CóS 发布消息完成
SUBSCRIBE 8 C->S 订阅请求
SUBACK 9 S->C 订阅确认
UNSUBSCRIBE 10 C->S 取消订阅
UNSUBACK 11 S->C 取消订阅确认
PING 12 C->S 客户端发送PING(连接保活)命令
PINGRSP 13 S->C PING命令回复
DISCONNECT 14 C->S 断开连接
  • 第一个byte第3bit DUP flag是用来在保证消息传输可靠的,如果设置为1,则在下面的变长头部里多加MessageId,并需要回复确认,保证消息传输完成,但不能用于检测消息重复发送
  • 第一个byte1-2bit QoS主要用于PUBLISH(发布态)消息的,保证消息传递的次数。00表示最多一次 即<=1;01表示至少一次 即>=1;10表示一次,即==1;11保留后用
  • 第一个byte第0bit retain 主要用于PUBLISH(发布态)的消息,表示服务器要保留这次推送的信息,如果有新的订阅者出现,就把这消息推送给它。如果不设那么推送至当前订阅的就释放了。

你可能感兴趣的:(使用wireshark分析mqtt数据)