且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用抓包工具Wireshark分析IoT设备网络行为

更新时间:2021-11-25 02:26:54

1. 背景[]

当我们进行物联网开发过程中,设备调试有时候很难进行,就需要借助网络抓包工具Wireshark来帮我们分析设备行为,定位问题。下面我们通过一个简单案例,给大家讲解使用Wireshark分析设备与阿里云IoT物联网平台通信的过程。

2. 准备工作

2.1 创建设备

在阿里云IoT物联网平台创建产品,并注册设备,获取三元组。
使用抓包工具Wireshark分析IoT设备网络行为

2.2 设备模拟程序

我们在电脑上用Nodejs编写device模拟程序,建立连接,订阅,发布,断开连接。

/**
 * node aliyun-iot-device.js
 */
const mqtt = require('aliyun-iot-mqtt');
//设备身份三元组+区域
const options = {
    "productKey": "设备PK",
    "deviceName": "设备DN",
    "deviceSecret": "设备Secret",
    "regionId": "cn-shanghai"
};

//1.建立连接
const client = mqtt.getAliyunIotMqttClient(options);
//2.订阅主题
setTimeout(function() {
    client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`)
}, 3 * 1000);
//3.发布消息
setTimeout(function() {
    client.publish(`/${options.productKey}/${options.deviceName}/user/update`, getPostData(),{qos:1});
}, 5 * 1000);
//4.关闭连接
setTimeout(function() {
    client.end();
}, 8 * 1000);


function getPostData() {
    const payloadJson = {
        temperature: Math.floor((Math.random() * 20) + 10),
        humidity: Math.floor((Math.random() * 20) + 10)
    }
    console.log("payloadJson " + JSON.stringify(payloadJson))
    return JSON.stringify(payloadJson);
}

2.3 使用Wireshark抓取网络包

IoT物联网平台使用MQTT协议通信,我们只需要配置如下规则即可:
 tcp and port 1883 
使用抓包工具Wireshark分析IoT设备网络行为

2.4 启动模拟程序

使用抓包工具Wireshark分析IoT设备网络行为

3. 网络抓包分析

随着模拟脚本执行完毕,完整的MQTT网络交互过程都在wireshark捕捉到了。
为了方便我把设备ip标记成了 device,本次连接的阿里云IoT的IP保持不变。

3.1 TCP的三次握手

使用抓包工具Wireshark分析IoT设备网络行为
上面截图红框部分就是 TCP 的三次握手行为。由device的发起,设备端用的端口是 56150

3.2 MQTT的CONNECT行为

下图展示了MQTT的Connect的行为。
点击Connect记录,在底部可以看到详细报文。其中client id,user name,password是这次CONNECT用来验证设备合法性的身份信息。想了解细节请 移步这里
使用抓包工具Wireshark分析IoT设备网络行为

身份验证完成,IoT物联网平台会回复CONNACK作为CONNECT的响应。
使用抓包工具Wireshark分析IoT设备网络行为

3.3 MQTT的SUBSCRIBE行为

下图展示了device向IoT物联网平台订阅topic的过程。这里device主动订阅了一个Topic,见红框部分。
使用抓包工具Wireshark分析IoT设备网络行为
下图展示了IoT物联网平台响应device订阅的行为。
使用抓包工具Wireshark分析IoT设备网络行为

3.3 MQTT的PUBLISH行为

下图展示了device向IoT物联网平台PUBLISH一条QoS=1的消息。在报文信息里,我们可以看到消息对应的Topic和Payload。
使用抓包工具Wireshark分析IoT设备网络行为

由于是QoS=1消息,IoT物联网平台会回复一条PUBACK给device。
使用抓包工具Wireshark分析IoT设备网络行为
在IoT物联网控制台的日志服务也能看到这条消息日志。
使用抓包工具Wireshark分析IoT设备网络行为

3.4 MQTT的DISCONNECT行为

下图展示了device主动发起DISCONNECT命令,断开MQTT连接通道。
使用抓包工具Wireshark分析IoT设备网络行为

3.5 TCP的四次挥手

使用抓包工具Wireshark分析IoT设备网络行为
在IoT物联网控制台的日志服务也能看到完整的设备上下线日志,如下。
使用抓包工具Wireshark分析IoT设备网络行为

4. 结束语

至此,我们掌握了使用Wireshark抓包工具分析设备和阿里云IoT物联网平台网络通信的基本技能,希望对大家IoT物联网开发有所帮助。

5. 附录

TCP层的几个标识

SYN 表示建立连接
FIN 表示关闭连接
ACK 表示响应
PSH 表示有 DATA数据传输
RST 表示连接重置

使用抓包工具Wireshark分析IoT设备网络行为