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各种报文中各个字节的含义。以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