当前位置:网站首页>【MQTT从入门到提高系列 | 09】WireShark抓包分析MQTT报文
【MQTT从入门到提高系列 | 09】WireShark抓包分析MQTT报文
2022-07-29 01:38:00 【机器未来】
这是机器未来的第37篇文章
原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126032312

文章目录
本文记录如何使用WireShark来抓取MQTT报文,分析报文并于MQTT3.1.1规约印证。
1. 环境配置
详见MQTT从入门到提高(一):从0到1快速搭建MQTT测试环境
2. 启动Wireshark监听
启动后,点击【捕获选项】按钮,如图1,然后点击回环网卡【BSD loopback】,如图2,然后点击【开始】按钮,如图3
注意:本测试Broker与客户端均运行于本地,因此捕获网卡为本地回环网卡。配置可根据实际情况使用响应网卡。

- 启动后,输入过滤规则【tcp.port == 1883】,注意大小写敏感,1883是MQTT Broker无加密时的监听端口

3. 启动Mqtt broker
启动【terminal】终端命令行工具,输入
mosquitto.exe -v
输出如下:
PS C:\Users\25267> mosquitto.exe -v
1648199085: mosquitto version 2.0.14 starting
1648199085: Using default config.
1648199085: Starting in local only mode. Connections will only be possible from clients running on this machine.
1648199085: Create a configuration file which defines a listener to allow remote access.
1648199085: For more details see https://mosquitto.org/documentation/authentication-methods/
1648199085: Opening ipv4 listen socket on port 1883.
1648199085: Opening ipv6 listen socket on port 1883.
1648199085: mosquitto version 2.0.14 running
4. 订阅主题sensors/temperature
4.1 启动订阅
- 新开一个终端输入
mosquitto_sub.exe -t sensors/temperature -q 1
- Broker的输出如下:
1648199291: New connection from 127.0.0.1:12245 on port 1883.
1648199291: New client connected from 127.0.0.1:12245 as auto-1744742D-43CA-CFDB-7C5D-19BE38B45F05 (p2, c1, k60).
1648199291: No will message specified.
1648199291: Sending CONNACK to auto-1744742D-43CA-CFDB-7C5D-19BE38B45F05 (0, 0)
1648199291: Received SUBSCRIBE from auto-1744742D-43CA-CFDB-7C5D-19BE38B45F05
1648199291: sensors/temperature (QoS 1)
1648199291: auto-1744742D-43CA-CFDB-7C5D-19BE38B45F05 1 sensors/temperature
1648199291: Sending SUBACK to auto-1744742D-43CA-CFDB-7C5D-19BE38B45F05
可以看到,有三个MQTT相关的命令:CONNACK、SUBSCRIBE、SUBACK
- Wireshark监听记录如图:

可以看到wireshark已经监听到4个MQTT报文:Connect、Connect Ack、Subscribe Request、Subscribe Ack。接下来,依次分析4个报文。
Wireshark工具自带MQTT解析功能,下方是MQTT原始报文,上方是MQTT解析后的数据描述。
4.2 CONNECT报文解析
- Connect控制报文的协议规约为

- 手撕Connect报文
10 0C 00 04 4D 51 54 54 04 02 00 3C 00 00
| 序号 | 数据 | 描述 | 备注 |
|---|---|---|---|
| 1 | 10 | Fixed Header, 高4位为报文消息标识符,0x01代表Connect | |
| 2 | 0C | Remaining Length, 剩余长度,不包含长度域本身,包含可变消息头和负载的长度, 0C到0x00的长度正好是12 | |
| 3 | 00 04 | Protocol Name Length, 协议名称的UTF-8字符串的长度域,MSB在前,LSB在后,其值为4Bytes | |
| 4 | 4D 51 54 54 | Protocol Name Value,为ASCII编码,对应的值为MQTT,为协议名称UTF-8字符串的值域 | |
| 5 | 04 | Protocol Level, 协议级别,值为4,对应MQTT3.1.1的协议版本 | |
| 6 | 02 | ConnectFlags,连接标志,bit1为1,即CleanSession为1,表示会话为清洁会话, 之前服务器存储的历史会话都不会继承,会创建新的会话。 | |
| 7 | 00 3C | KeepAlive, 保活时间,值为60,表示客户端和服务器之间至少60s通讯一次,如果空 闲则发送PINGREQ报文 | |
| 8 | 00 00 | Client Identifier,客户端标识符,必须存在 |
4.3 CONNACK报文解析
- CONNACK报文规约

- CONNACK Wireshark解析

4.4 SUBSCRIBE报文解析
- SUBSCRIBE报文规约

- SUBSCRIBE Wireshark解析

4.5 SUBACK
- SUBACK协议规约

- SUBACK Wireshark解包分析

注意:返回码为01,表示成功,其对应的SUB QoS=1.详见【MQTT从入门到提高系列 | 03】一文掌握MQTT3.1.1协议框架 P4.9章节。
5. 启动Broker TLS加密模式
- 启动Broker,以加密TLS模式, 详情请参考MQTT从入门到提高(二):MQTT TLS加密传输
mosquitto.exe -c .\mosquitto.conf -v
Broker输出如下:
PS D:\110_Work_ProductsResearch\111-Router\mosquitto> mosquitto.exe -c .\mosquitto.conf -v
1648202386: mosquitto version 2.0.14 starting
1648202386: Config loaded from .\mosquitto.conf.
1648202386: Opening ipv6 listen socket on port 8883.
1648202386: Opening ipv4 listen socket on port 8883.
1648202386: mosquitto version 2.0.14 running
- 订阅主题hello
mosquitto_sub.exe --cafile D:\110_Work_ProductsResearch\111-Router\mosquitto\cert\ca.crt -t hello -h 127.0.0.1 -u demo -P 123456 -v
Broker输出如下:
1648202564: New connection from 127.0.0.1:24723 on port 8883.
1648202564: New client connected from 127.0.0.1:24723 as auto-EEA03522-3A30-0904-F73B-A3854D233BC3 (p2, c1, k60, u'zsm').
1648202564: No will message specified.
1648202564: Sending CONNACK to auto-EEA03522-3A30-0904-F73B-A3854D233BC3 (0, 0)
1648202564: Received SUBSCRIBE from auto-EEA03522-3A30-0904-F73B-A3854D233BC3
1648202564: hello (QoS 0)
1648202564: auto-EEA03522-3A30-0904-F73B-A3854D233BC3 0 hello
1648202564: Sending SUBACK to auto-EEA03522-3A30-0904-F73B-A3854D233BC3
- Wireshark监听
输入过滤规则【tcp.port == 8883】,TLS加密访问的服务器监听端口为8883,可以看到消息类型已经变为TLSv1.3
MQTT TLS客户端与服务端的交互流程将来再研究。
《MQTT快速入门系列》快速导航:
- 【MQTT从入门到提高系列 | 01】从0到1快速搭建MQTT测试环境
- 【MQTT从入门到提高系列 | 02】MQTT3.1.1TLS加密传输
- 【MQTT从入门到提高系列 | 03】一文掌握MQTT3.1.1协议框架
- 【MQTT从入门到提高系列 | 04】MQTT应用协议之CONNECT
- 【MQTT从入门到提高系列 | 05】MQTT3.1.1之PUBLISH发布工作流
- 【MQTT从入门到提高系列 | 06】MQTT3.1.1之SUBSCRIBE订阅工作流
- 【MQTT从入门到提高系列 | 07】MQTT3.1.1之链路保活及断开
- 【MQTT从入门到提高系列 | 08】MQTT3.1.1主题Topic详解
写在末尾:
- 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
- 专栏简介:从0到1掌握MQTT分布式协议。
- 面向人群:零基础编程爱好者
- 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
- Python零基础快速入门系列
- 快速入门Python数据科学系列
- 人工智能开发环境搭建系列
- 机器学习系列
- 物体检测快速入门系列
- 自动驾驶物体检测系列
- …

边栏推荐
- Qt源码分析--QObject(4)
- Click the button to slide to the specified position
- "Wei Lai Cup" 2022 Niuke summer multi school training camp 3, sign in question cajhf
- mobile-picker.js
- 特殊流&Properties属性集实例遇到的问题及解决方法
- Motionlayout -- realize animation in visual editor
- [云原生]微服务架构是什么
- 费曼学习法(符号表)
- Lm13 morphological quantification momentum period analysis
- Blind separation of speech signals based on ICA and DL
猜你喜欢

STM32 DMA receives serial port data

试着换个角度理解低代码平台设计的本质

How to find the right agent type? Multi angle analysis for you!

Mathematical modeling -- the laying of water pipes

12.< tag-动态规划和子序列, 子数组>lt.72. 编辑距离
![[one · data | chained binary tree]](/img/83/d62a47f1264673f1e898335303a7a6.png)
[one · data | chained binary tree]

Force deduction brush question (1): sum of two numbers

12. < tag dynamic programming and subsequence, subarray> lt.72. edit distance

autoware中ndtmatching功能加载点云图坐标系修正的问题

LeetCode 练习——剑指 Offer 45. 把数组排成最小的数
随机推荐
In 2022, the official data of programming language ranking came, which was an eye opener
Solution of Lenovo notebook camera unable to open
[云原生]微服务架构是什么
Mobile communication -- simulation model of error control system based on convolutional code
年中总结 | 与自己对话,活在当下,每走一步都算数
记一次 ERROR scheduler.AsyncEventQueue: Dropping event from queue shared导致OOM
Resnet50 + k-fold cross validation + data enhancement + drawing (accuracy, recall, F value)
Form verification hidden input box is displayed before verification
【RT学习笔记1】RT-Thread外设例程——控制Led灯闪烁
Flexible layout single selection
Mathematical modeling -- Optimization of picking in warehouse
MySQL之数据查询(多表查询)
Implementation of 10m multifunctional signal generator with FPGA
解决使用ESlint时,和vetur冲突导致保存变双引号,结尾逗号等
iVX低代码平台系列详解 -- 概述篇(二)
(CVPR-2019)选择性的内核网络
Control buzzer based on C51
12.< tag-动态规划和子序列, 子数组>lt.72. 编辑距离
How to find the right agent type? Multi angle analysis for you!
Mathematical modeling - location of police stations