是什么?
- 设备 A 与外界没有建立任何实质性连接,可以称之为信息孤岛。
- 设备 B 通过路由 或者直接 将 Wifi 的 ssid 与密码 UDP广播 传递给 A
为什么?
- 解决将无线网络的 ssid 与密码传输到设备难题
怎么做?
- 芯片自带AT指令开启Airkiss功能
AT\r\n
AT+CWMODE=1\r\n
AT+CWSTARTSMART=3\r\n #设置配置参数3,SmartConfig功能支持ESP-TOUCH以及AirKiss
核心本质
- UDP包的广播与监听
- 9bits Length字段的编码
前导码
解决问题
- 多个AP不知道哪个信道
- 同一信道海量UDP包同时发送
- UDP广播包需要封装,与最后SNAP包存在差异
前导域-差异值
- 在发送链路层数据之前,需要先发送400ms覆盖8个信道的前导域
- 前导域由4个字节组成 固定为{1,2,3,4}
- 求得差异值,才能解析出实际的信息数据
举个例子
- 接受方通过监听,在链路层截获802.2 SNAP格式的前导数据包,其Length字段的值分别为53,54,55,56,那差异值就能确定为53-1=52。之后接收方接收到数据之后都用SNAP包的Length字段值减去52,即能得到实际的信息数据
链路层LLC数据格式
监听SNAP格式数据包
- 启用 Wi-Fi 芯片的混杂模式监听空间中的无线信号
- 由于操作系统的限制,,发送方只能改变Length字段进行信息传递
![[Pasted image 20250302173412.png]]
字段 | 长度(字节) | 含义 |
---|---|---|
DMAC | 6 | 目的MAC地址。 |
SMAC | 6 | 源MAC地址。 |
Length | 2 | 指后续数据的字节长度,但不包括CRC检验码。 |
DSAP | 1 | 目的服务访问点,若后面类型为IP帧值设为0x06。 |
SSAP | 1 | 源服务访问点,若后面类型为IP帧值设为0x06。 |
Ctrl | 1 | 该字段值通常设为0x03,表示无连接服务的IEEE 802.2无编号数据格式。 |
SNAP-ID | 5 | 由OUI和Type两部分组成。 |
OUI | 3 | 3字节的组织唯一标识符(Organizationally Unique Identifier),其值通常等于MAC地址的前3字节,即网络适配器厂商代码。 |
Type | 2 | 标识以太网帧所携带的上层数据类型。 |
Data | 44~1498 | 负载。 |
CRC | 4 | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 |
整体架构
magic code field
-
Length是 Data Length
-
在信息传输之前
- 先对AP进行扫描,通过获取的beacon可以得知无线环境中所有非隐藏AP的ssid、rssi以及信道。
-
在传输过程中
- 接收方先从magic code field中获取目标AP ssid 的crc8值,然后再和事先扫描所得到的ssid的crc8值进行比对,如果发现相同值,那么在接下来的接收过程中接收方就不用再接收ssid信息
prefix code
- Length是发送密码长度
sequence header
-
数据以4为粒度进行划分,每4个数据组成一个sequence
-
以sequence为单位进行数据的发送
-
每个sequence都由sequence header字段和data字段组成
-
从sequence index 开始到本 sequence data 结束所有数据的 crc8 的低 7 位值(最高位需补 0)
data
数据内容
- 随机数的作用是
- 当数据接收方连上AP之后,立即发送以该随机数为内容的UDP广播包
- 当发送方收到该广播包后就能确认接收方已经准确接收到所有数据
抓包解析
- 使用安信可提供的工具,抓包罢了不用真正输入真是ssid,毕竟仅仅是广播
- 使用wireshark
前导码
- 手机192.168.100.3 发出的UDP包 很明显 data 长度Length 1 2 3 4 满足前导域条件
magic code field
- 20组
prefix code
- 8 位密码
- CRC 0XC2
sequence header
- 第一个Index 数据0x31 0x32 0x33 0x34 对应ascii 前四位密钥1234
- 第二个Index 数据0x35 0x36 0x37 0x38 对应ascii 前四位密钥5678
- 第三个 sequence header a8 82 包后置
- 随机数 0x01
- ssid 应该是108-3
第四个 sequence header f0 83
文档链接说明
-
参考文档
https://breezetemple.github.io/2019/01/04/airkiss/ -
参考文档
Airkiss协议详解.pdf -
参考文档
Radiotap、Prism 和 802.11 帧格式分析 |