LV02-01-天猫精灵IOT-07-SmartConfig-03-多播配网报文分析

本文主要是天猫精灵IOT Smart config—— 多播配网报文分析相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

这一节我们来看一下多播配网的抓包分析。

一、WiFi不加密

当数据包加密的时候,我们好像是看不到是UDP报文还是TCP报文,所以这里我们设置路由器不加密,抓明文报文来学习多播配网。

1. 路由器配置

跟上一节的路由器配置一样,SSID为dlink,不加密,信道还是选择6。

image-20231220192439493

2. OmniPeek配置

主要是过滤器的设置,这里Address1就设置为手机的mac地址,Address2就设置为Any sddress,因为我们现在是抓多播配网的报文,mac地址是会变化的,所以这里只能选这个。接着是协议,我们知道配网其实是UDP报文,所以这里就选择对应的UDP协议。

image-20231220191933349

然后我们开启抓包就可以了。

3. 手机操作

天猫精灵APP在扫描配网二维码进行配网的时候,是默认支持多播配网的,且会优先选择多播配网,所以我们可以直接仿照前面的操作对设备进行配网即可。所以实际上,手机发送数据的时候,广播配网数据和多播配网数据是都会发的。手机连接到WiFi,然后找到设备的配网二维码,接着,打开天猫精灵APP,扫描这个配网二维码即可,然后输入WiFi名称,密码不填,然后下一步即可。

4. 怎么辨别多播报文?

根据上面的操作,我们会抓到大量的UDP报文,那哪些是我们的多播数据报文?我们前面知道多播的IP范围从 224.0.0.0 到 239.255.255.255,所以我们找Destination这个范围内的即可。

image-20231220193312003

如上图的数据包4,我们看到Destination物理地址为01:00:5E开头的,所以这就可以确定是我们要抓的多播配网数据报文。这里的239.1.3.184对应的物理mac地址为01:00:5E:01:03:B8,我们关注一下后面的01:03:B8,其中B8转换为十进制为184:

image-20231220195353197

这里可以看到是对应的,至少会有地23位是一一对应,那么对应的报文信息是啥?我们前面已经了解了多播报文的数据格式,多播地址有个较大的范围,地址有三个字节是变化的,我们可以使用这三个变化的地址空间来传递信息。同样由于每次只能传递三个字节,我们需要一个顺序字段,一般会占用一个字节,这样还有两个字节来传递信息,如下图是使用多播MAC地址的示意图:

image-20231219080009260

其中payload的数据格式如下:

image-20231220075356413

其中flag字段占1个字节,这8位信息如下:

image-20231220201550564

由于IP和mac地址是映射的一个关系,所以IP是可以表现mac的索引的,我们看抓到的包,找一下索引从0开始的:

image-20231220202239060

5. 报文数据分析

5.1 地址239.0.17.198

image-20231220202510880

我们来看一下这个239.0.17.198,对应上面的数据格式,0表示索引,含义解析如下:

image-20231220203511887

5.2 地址239.1.3.184

image-20231220203552284

含义解析如下:

image-20231220204058421

由于passwd位0,所以直接去掉Passwd Len和Pass word两个字段,直接到了Token Len字段,可以得到Token len为3,所以后面的B8就是第一个token。

5.3 地址239.2.39.49

image-20231220204138379

含义解析如下:

image-20231220204256336

5.4  地址239.3.5.100

image-20231220204349487

含义解析如下:

image-20231220204557947

5.5 地址239.4.108.105

image-20231220204715352

含义解析如下:

image-20231220204929482

5.6 总结

由上面的分析,我们就可以知道多播配网数据传输的大概过程了。和之前一样,要是发现数据包中间有断续,可能是抓丢了,继续往后找连续的就可以了。

二、WiFi加密

1. 路由器配置

image-20231220214721209

和之前加密的配置一样,密码配置为12345678。

2. OmniPeek配置

由于这次数据包加密了,所以我们就不能直接抓UDP包了,我么需要修改一下过滤器协议,我们改成抓802.11的数据包:

image-20231220215754823

由于我们这次要抓数据包,这样就意味着我们会抓取大量的非多播报文,怎么过滤?我们知道多播的物理地址是有一个范围的,要是能过滤特定mac地址范围区间的,那不就好了吗,这下我们需要用一下过滤器的高级设置:

image-20231220221935978

再次点击OK后,最终界面如下:

image-20231220222029755

3. 手机操作

和前面一样。

4. 加密状态的多播报文

我们抓到的数据如下所示:

image-20231220222547845

可以看到,现在抓到的报文全部都是只有物理地址了,虽然我们看不到什么有效的信息但是我们知道上面的Destination里面包含了相关的信息:

image-20231220222859400

5. 报文数据分析

这次我们只分析后面的这三个字节:

  • 01:00:5E:00:1A:C7
image-20231220223223283
  • 01:00:5E:01:08:08
image-20231220223939460

这里可以得到密码长度为8,这意味着后面连续8个数据都是密码,但是他们并不是直接就是密码的值,而是被加密过的,后面分析代码的时候,代码里面应该会有解析的部分。

  • 01:00:5E:02:15:2E ~ 01:00:5E:05:2D:03

我们看到一开始的图缺了03的数据,说明中间抓丢了,我们继续往后找连续的就可以了:

image-20231220225303009

这里会有7个数据都是密码的,最后一个03应该是代表Token Len:

image-20231220225042680
  • 01:00:5E:06:56:37 ~ 01:00:5E:07:8D:05

这里有三个数据是代表token,这里直接写上去,然后最后一个05是代表SSID Len:

image-20231220225126255
  • 01:00:5E:08:64:6C
image-20231220225539896

分析到这里,大概就可以看到,跟前面是完全对上的。