协议-Airkiss

news/2025/3/6 20:23:04/

是什么?

  • 设备 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]]
在这里插入图片描述

字段长度(字节)含义
DMAC6目的MAC地址。
SMAC6源MAC地址。
Length2指后续数据的字节长度,但不包括CRC检验码。
DSAP1目的服务访问点,若后面类型为IP帧值设为0x06。
SSAP1源服务访问点,若后面类型为IP帧值设为0x06。
Ctrl1该字段值通常设为0x03,表示无连接服务的IEEE 802.2无编号数据格式。
SNAP-ID5由OUI和Type两部分组成。
OUI33字节的组织唯一标识符(Organizationally Unique Identifier),其值通常等于MAC地址的前3字节,即网络适配器厂商代码。
Type2标识以太网帧所携带的上层数据类型。
Data44~1498负载。
CRC4用于帧内后续字节差错的循环冗余检验(也称为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 帧格式分析 |



http://www.ppmy.cn/news/1577163.html

相关文章

Matlab 大量接单

分享一个matlab接私活、兼职的平台 1、技术方向满足任一即可 2、技术要求 3、最后 技术方向满足即可 MATLAB:熟练掌握MATLAB编程语言,能够使用MATLAB进行数据处理、机器学习和深度学习等相关工作。 机器学习、深度学习、强化学习、仿真、复现、算法、…

【leetcode hot 100 54】螺旋矩阵

错误解法&#xff1a;以轮数定义旋转过程进行输出 class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list new LinkedList<>();int round0; // 已经循环的轮数int i0,j0;int mmatrix.length, nmatrix[0].length;while(ro…

yum修改阿里云

第一步&#xff1a;打开FinalShell&#xff0c;点击haodoop100&#xff0c;输入命令&#xff1a; sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 第二步&#xff1a;继续输入命令&#xff1a;sudo yum clean all …

前端基础之浏览器本地存储

如我们在一些网站中&#xff0c;去进行数据搜索&#xff0c;在浏览器中是有一个对于的存储的&#xff0c;并且我们可以去手动进行value的增删操作 LocalStroage的使用 并且将浏览器关闭之后&#xff0c;数据也会保存&#xff0c;除非用户手动清理数据或是清空缓存 <!DOCTYPE…

2022 年学习 Spring Boot 开发的最佳书籍

在我们之前的文章中&#xff0c;我们查看了学习 Java 编程的必读书籍我们在其中探索了一些您可以利用的资源来加快 Java 开发的速度。在此基础上&#xff0c;在用 vanilla Java 编写一段时间后&#xff0c;您将意识到组织文件和其他内容&#xff08;例如设置 getter 和 setter、…

SSE 和 WebSocket 的对比

SSE 和 WebSocket 的对比 在现代Web开发中&#xff0c;实时通信是提升用户体验的重要手段。Server-Sent Events&#xff08;SSE&#xff09;和WebSocket是两种实现服务器与客户端之间实时数据传输的技术&#xff0c;但它们在功能、适用场景以及实现方式上有所不同。 1. 基本概…

Linux驱动开发之ADC驱动与基础应用编程

目录 ADC简介 SARADC 设备树配置 IIO子系统 应用程序编写 运行测试 ADC简介 模拟量指的是表示各种实际信息的物理量&#xff0c;可以是电量&#xff08;如电压&#xff0c;电流等&#xff09;&#xff0c;也可以是来自传感器的非电量&#xff08;如压力&#xff0c;温度…

Enterprise Architect 16 下载、安装与无限30天操作

文章目录 Enterprise Architect 16 简介&#xff08;一&#xff09;支持多种建模语言和标准&#xff08;二&#xff09;强大的版本控制、协作和文档管理功能&#xff08;三&#xff09;增强的技术和用户体验&#xff08;四&#xff09;高级功能和扩展性 一&#xff0c;下载软件…