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。
2. OmniPeek配置
主要是过滤器的设置,这里Address1就设置为手机的mac地址,Address2就设置为Any sddress,因为我们现在是抓多播配网的报文,mac地址是会变化的,所以这里只能选这个。接着是协议,我们知道配网其实是UDP报文,所以这里就选择对应的UDP协议。
然后我们开启抓包就可以了。
3. 手机操作
天猫精灵APP在扫描配网二维码进行配网的时候,是默认支持多播配网的,且会优先选择多播配网,所以我们可以直接仿照前面的操作对设备进行配网即可。所以实际上,手机发送数据的时候,广播配网数据和多播配网数据是都会发的。手机连接到WiFi,然后找到设备的配网二维码,接着,打开天猫精灵APP,扫描这个配网二维码即可,然后输入WiFi名称,密码不填,然后下一步即可。
4. 怎么辨别多播报文?
根据上面的操作,我们会抓到大量的UDP报文,那哪些是我们的多播数据报文?我们前面知道多播的IP范围从 224.0.0.0 到 239.255.255.255,所以我们找Destination这个范围内的即可。
如上图的数据包4,我们看到Destination物理地址为01:00:5E开头的,所以这就可以确定是我们要抓的多播配网数据报文。这里的239.1.3.184对应的物理mac地址为01:00:5E:01:03:B8,我们关注一下后面的01:03:B8,其中B8转换为十进制为184:
这里可以看到是对应的,至少会有地23位是一一对应,那么对应的报文信息是啥?我们前面已经了解了多播报文的数据格式,多播地址有个较大的范围,地址有三个字节是变化的,我们可以使用这三个变化的地址空间来传递信息。同样由于每次只能传递三个字节,我们需要一个顺序字段,一般会占用一个字节,这样还有两个字节来传递信息,如下图是使用多播MAC地址的示意图:
其中payload的数据格式如下:
其中flag字段占1个字节,这8位信息如下:
由于IP和mac地址是映射的一个关系,所以IP是可以表现mac的索引的,我们看抓到的包,找一下索引从0开始的:
5. 报文数据分析
5.1 地址239.0.17.198
我们来看一下这个239.0.17.198,对应上面的数据格式,0表示索引,含义解析如下:
5.2 地址239.1.3.184
含义解析如下:
由于passwd位0,所以直接去掉Passwd Len和Pass word两个字段,直接到了Token Len字段,可以得到Token len为3,所以后面的B8就是第一个token。
5.3 地址239.2.39.49
含义解析如下:
5.4 地址239.3.5.100
含义解析如下:
5.5 地址239.4.108.105
含义解析如下:
5.6 总结
由上面的分析,我们就可以知道多播配网数据传输的大概过程了。和之前一样,要是发现数据包中间有断续,可能是抓丢了,继续往后找连续的就可以了。
二、WiFi加密
1. 路由器配置
和之前加密的配置一样,密码配置为12345678。
2. OmniPeek配置
由于这次数据包加密了,所以我们就不能直接抓UDP包了,我么需要修改一下过滤器协议,我们改成抓802.11的数据包:
由于我们这次要抓数据包,这样就意味着我们会抓取大量的非多播报文,怎么过滤?我们知道多播的物理地址是有一个范围的,要是能过滤特定mac地址范围区间的,那不就好了吗,这下我们需要用一下过滤器的高级设置:
再次点击OK后,最终界面如下:
3. 手机操作
和前面一样。
4. 加密状态的多播报文
我们抓到的数据如下所示:
可以看到,现在抓到的报文全部都是只有物理地址了,虽然我们看不到什么有效的信息但是我们知道上面的Destination里面包含了相关的信息:
5. 报文数据分析
这次我们只分析后面的这三个字节:
- 01:00:5E:00:1A:C7
- 01:00:5E:01:08:08
这里可以得到密码长度为8,这意味着后面连续8个数据都是密码,但是他们并不是直接就是密码的值,而是被加密过的,后面分析代码的时候,代码里面应该会有解析的部分。
- 01:00:5E:02:15:2E ~ 01:00:5E:05:2D:03
我们看到一开始的图缺了03的数据,说明中间抓丢了,我们继续往后找连续的就可以了:
这里会有7个数据都是密码的,最后一个03应该是代表Token Len:
- 01:00:5E:06:56:37 ~ 01:00:5E:07:8D:05
这里有三个数据是代表token,这里直接写上去,然后最后一个05是代表SSID Len:
- 01:00:5E:08:64:6C
分析到这里,大概就可以看到,跟前面是完全对上的。