协议-Airkiss

是什么?

  • 设备 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.rhkb.cn/news/27028.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git从零学起

从事了多年java开发,一直在用svn进行版本控制,如今更换了公司,使用的是git进行版本控制,所以打算记录一下git学习的点滴,和大家一起分享。 百度百科: Git(读音为/gɪt/)是一个开源…

企微审批中MySQL字段TEXT类型被截断的排查与修复实践

在MySQL中,TEXT类型字段常用于存储较大的文本数据,但在一些应用场景中,当文本内容较大时,TEXT类型字段可能无法满足需求,导致数据截断或插入失败。为了避免这种问题,了解不同文本类型(如TEXT、M…

《Python实战进阶》No 10:基于Flask案例的Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻击

第10集:Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻击 在现代 Web 开发中,安全性是至关重要的。无论是用户数据的保护,还是系统稳定性的维护,开发者都需要对常见的 Web 安全威胁有深刻的理解,并采取有效的防…

nio多线程版本

多线程多路复用 多线程NIO,,就是多个线程,每个线程上都有一个Selector,,,比如说一个系统中一个线程用来接收请求,,剩余的线程用来读写数据,,每个线程独立干自…

LabVIEW DataSocket 通信库详解

dataskt.llb 是 LabVIEW 2019 内置的核心函数库之一,位于 vi.lib\Platform\ 目录下,专注于 DataSocket 技术的实现。DataSocket 是 NI 提供的网络通信协议,支持跨平台、跨设备的实时数据共享,广泛应用于远程监控、分布式系统集成等…

【UI设计——视频播放界面分享】

视频播放界面设计分享 在本次设计分享中,带来一个视频播放界面的设计作品。 此界面采用了简洁直观的布局。顶部是导航栏,包含主页、播放、搜索框等常见功能,方便用户快速找到所需操作。搜索框旁输入 “萌宠成长记”,体现了对特定内…

论coding能力 new bing 对比 chatgpt

近日需要编程计算每个月的第二个星期二是哪一天,因为那一天需要做一件重要的事情,我想在这个日期做一个提醒,于是把这个重任交给当下最火的AI,微软new bing和chatGPT,实验对比结果如下:微软new bing会给你参…

leetcode第39题组合总和

原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…

计算机毕业设计SpringBoot+Vue.js社区智慧养老监护管理平台(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Linux:动静态库

库:Linux:静态库(libxxxx.a)和动态库(libxxxx.so) 库:windows静态库(xxxx.lib)和动态库 (xxxx.dll) ldd 可以看自己所依赖的目标文件 /lib64/libc.so.6------>这是c标准库 file code (动态库&…

在Pycharm中将ui文件修改为py文件

在Pycharm中将ui文件修改为py文件 有些时候,我们需要把QTDesigner生成的.ui文件修改为.py文件 在一些教程中,通常使用cmd打开终端修改,或者是有一些人写了一些脚本来修改 这里我们可以使用pycharm来快速的修改 首先,我们在pyc…

RabbitMQ面试题及原理

RabbitMQ使用场景: 异步发送(验证码、短信、邮件…)MYSQL和Redis, ES之间的数据同步分布式事务削峰填谷 1. 消息可靠性(不丢失) 消息丢失场景: RabbitMQ-如何保证消息不丟失? 开启生产者确…

GDidees CMS v3.9.1本地文件泄露漏洞(CVE-2023-27179)

漏洞简介: GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞,漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 漏洞环境: 春秋云镜中的漏洞靶标,CVE编号为CVE-2023-27179 漏洞复现: 进入靶场发现没…

金融项目实战

测试流程 测试流程 功能测试流程 功能测试流程 需求评审制定测试计划编写测试用例和评审用例执行缺陷管理测试报告 接口测试流程 接口测试流程 需求评审制定测试计划分析api文档编写测试用例搭建测试环境编写脚本执行脚本缺陷管理测试报告 测试步骤 测试步骤 需求评审 需求评…

本地部署 DeepSeek:从 Ollama 配置到 Spring Boot 集成

前言 随着人工智能技术的迅猛发展,越来越多的开发者希望在本地环境中部署和调用 AI 模型,以满足特定的业务需求。本文将详细介绍如何在本地环境中使用 Ollama 配置 DeepSeek 模型,并在 IntelliJ IDEA 中创建一个 Spring Boot 项目来调用该模型…

Java 大视界 -- 基于 Java 的大数据分布式缓存一致性维护策略解析(109)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

ansible自动化运维工具学习笔记

目录 ansible环境部署 控制端准备 被控制端准备 ansible批量管理主机的方式主要有两种 配置准备: ssh密码认证方式管理机器 密码登录,需要各主机密码相同 配置免密登录 ssh密钥方式批量管理主机 ansible实现批量化主机管理的模式 ansible-doc命令 comman…

2025-02-27 学习记录--C/C++-PTA 7-29 删除字符串中的子串

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h> // 引入标准输入输出库&#xff0c…

ETL-kettle数据转换使用详解

一、excel转换成mysql 表格就按照我们刚才转换的表格来转换成MySQL数据 在MySQL数据库中创建数据库&#xff0c;这个根据自身情况。我就在现有test库中测试了。 根据以上步骤&#xff0c;新建转换。 构建流程图&#xff0c;选择excel输入和表输出 将两个组件连接起来 双击…

AI人工智能机器学习之聚类分析

1、概要 本篇学习AI人工智能机器学习之聚类分析&#xff0c;以KMeans、AgglomerativeClustering、DBSCAN为例&#xff0c;从代码层面讲述机器学习中的聚类分析。 2、聚类分析 - 简介 聚类分析是一种无监督学习的方法&#xff0c;用于将数据集中的样本划分为不同的组&#xff…