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

<a name="EQWRp"></a>

1. 背景

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

<a name="BuJcS"></a>

2. 准备工作

<a name="kTrS1"></a>

2.1 创建设备

在阿里云IoT物联网平台创建产品,并注册设备,获取三元组。<br />
image.png
image.png

<a name="HJyN3"></a>

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);
}

<a name="zrAIW"></a>

2.3 使用Wireshark抓取网络包

IoT物联网平台使用MQTT协议通信,我们只需要配置如下规则即可:<br />** ****tcp and port 1883**** **<br />
image.png
image.png

<a name="hBx6k"></a>

2.4 启动模拟程序

image.png
image.png

<a name="NCWcV"></a>

3. 网络抓包分析

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

<a name="CjxLW"></a>

3.1 TCP的三次握手

image.png
image.png
<br />上面截图红框部分就是 TCP 的三次握手行为。由device的发起,设备端用的端口是 56150
<a name="amBHv"></a>

3.2 MQTT的CONNECT行为

下图展示了MQTT的Connect的行为。<br />点击Connect记录,在底部可以看到详细报文。其中client id,user name,password是这次CONNECT用来验证设备合法性的身份信息。想了解细节请 移步这里。<br />

image.png

身份验证完成,IoT物联网平台会回复CONNACK作为CONNECT的响应。<br />
image.png

<a name="m1Fx1"></a>

3.3 MQTT的SUBSCRIBE行为

下图展示了device向IoT物联网平台订阅topic的过程。这里device主动订阅了一个Topic,见红框部分。<br />
image.png
image.png

<br />下图展示了IoT物联网平台响应device订阅的行为。<br />
image.png
image.png

<a name="smJUG"></a>

3.3 MQTT的PUBLISH行为

下图展示了device向IoT物联网平台PUBLISH一条QoS=1的消息。在报文信息里,我们可以看到消息对应的Topic和Payload。<br />
image.png
image.png

由于是QoS=1消息,IoT物联网平台会回复一条PUBACK给device。<br />
image.png
image.png

<br />在IoT物联网控制台的日志服务也能看到这条消息日志。<br />
image.png
image.png

<a name="vvIvk"></a>

3.4 MQTT的DISCONNECT行为

下图展示了device主动发起DISCONNECT命令,断开MQTT连接通道。<br />
image.png
image.png

<a name="tnJEV"></a>

3.5 TCP的四次挥手

image.png
image.png

<br />在IoT物联网控制台的日志服务也能看到完整的设备上下线日志,如下。<br />
image.png

<a name="gVuBy"></a>

4. 结束语

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

<a name="FDnzM"></a>

5. 附录

TCP层的几个标识

SYN 表示建立连接
FIN 表示关闭连接
ACK 表示响应
PSH 表示有 DATA数据传输
RST 表示连接重置
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)...
    殖民_FE阅读 4,513评论 1 6
  • 后期整理字体以及排版问题,修订不适合的翻译 “A wealth of information. Smart, ye...
    iamzzz阅读 769评论 0 0
  • 初始 MQTT 物联网 (internet of thing) ,表示的是可以把一些带某些传感器的设备(终端),接...
    人话博客阅读 2,380评论 0 49
  • 网络编程 1. 概论 建立连接:通过IP或者域名来连接两台设备,通过端口号找到对应的通信程序 通信协议:要传输的数...
    陵无山阅读 6,188评论 0 12
  • 最近这几年,网络上、纸媒上的鸡汤文是越来越多了,早上醒来、晚上睡前、新播了一部电影、才出了一个热点事件,那些鸡汤文...
    莲色笙香阅读 835评论 0 0