wifi配网原理

原文:https://blog.youkuaiyun.com/a13698709128/article/details/81566155 

 智能家电逐步迈进百姓家,作为一个技术员,必须知道智能单品是怎么接入网络。怎么理解配网呢,简单说就像你家里来了一个新朋友,你要把自家的wifi账号密码告诉她。

主流的配网方式分为两大类,一类是手动配网,一类是自动配网(个人理解)。

手动配网:

  手动配网就是主动把wifi账号密码告诉智能硬件,可以通过芯片自带的串口等接口主动把信息发到wifi芯片(透传模式)。此外,wifi芯片上电后开启AP,手机等设备以station身份将账号密码通过UPD、TCP等方式传输至智能硬件,收到密码后智能硬件转变身份,由AP变为STATION模式,链接指定ssid完成配网。

自动配网:

  自动配网可以理解做抓包,智能硬件抓取空间中的wifi数据帧,这些数据帧中间含有wifi账号密码。当然,此时的wifi工作在一种特殊模式下,抓到的数据帧也不是一般的数据帧。

   wifi工作模式:

    能够抓数据包的wifi此时处于混杂模式,混杂模式简单来说就是可以抓取空间中当前信道下的所有数据包(理论下,芯片处理能力足够。)抓取的是数据链路层数据包。能够抓包的wifi芯片必须支持混杂模式,我现在使用的有瑞昱、高通这些芯片都是支持混杂模式的,可以实现自动配网。

wifi帧处理:

一般配网信息由手机发出,通知路由器发配网信息。我们需要对wifi帧(802.11)有一个详细的了解

     位于数据链路层的wifi帧具有以上结构,除了DATA数据字段加密,其余字段全部可见,wifi在混杂模式下,可以将该包抓下来,但是全部数据都抓下来是没用的。手机通知路由器发出的包叫做组播包,其实组播包也是一种广播包,IP地址范围是224.0.0.0-239.255.255.255(详细可见https://www.cnblogs.com/ghj1976/p/5276452.html),广播地址是为FF。组播仅在组播范围内广播,不进行全局域网广播。配网时,手机需要加入组播,填充目标IP,进行UDP数据传输。IP地址与MAC地址映射关系为:将MAC地址的前25位设定为01.00.5e(此时应该是路由器替换该字段),而MAC地址的后23位对应IP地址的位(目标地址后三段),因为UDP面向无连接,即使目标IP不存在,也可以传输数据。

我抓包数据如下

关键代码

这个和上面所说的对应。

在进行抓包的时候进行相应的滤波处理可以将不需要的数据包过滤掉,规定协议时候,我们有三个字段可以使用,举个例子,你可以ssid放在第三字段,第三字段用来过滤做过滤条件,第一字段用作序号(使用mac地址隐藏IP,很高明),此处自己YY。我使用的是RTL8711进行抓包,因为它的SDK把以802.11帧源码暴露出来了,嘿嘿。高通的已被封装,无从入手。自动配网原理仅此而已。下面的是我抓取的配网信息,前面的是序号后面的是ssid以及key(此处显示不完整),应为UDP无连接,有的包不一定能够抓到,因此序号对配网很重要,智能硬件可以和手机协商多次重发,知道收到完整配网信息。收到配置信息后,退出混杂模式,使用Station链接wifi,完成配网

此外还有使用广播包进行配网的,广播包的目标mac全为FF,此时能用的仅仅有长度字段和镇序列字段FCS,根据这两个可以进行配网。

听说好像还有个mDNS进行配网,还是苹果用的,有空研究下。
 

<think>好的,用户想了解WiFi的方案、实现方法、技术文档和示例代码。我需要先整理常见的技术,比如Smart Config、AP模式、蓝牙辅助、声波等。然后,每种方案需要简要说明原理和优缺点。接下来,根据用户提供的引用,特别是引用[2]提到传统置复杂的问题,可能需要强调简化流程的方法。 用户可能需要示例代码,但引用中提供的Java代码是关于WiFi 6应用的,可能不太相关。不过,可以举其他例子,比如ESP8266或Android的代码片段。需要确保代码示例正确,并符合LaTeX格式要求。同时,注意引用标记要自然添加,比如在提到传统置问题时引用[2]。 还要生成相关问题,考虑用户可能进一步询问技术细节、安全性或具体平台的实现。确保回答结构清晰,分点说明,帮助用户逐步理解不同方案的选择和应用场景。</think>### WiFi方案及实现方式 #### 一、主要技术方案 1. **Smart Config技术** 通过手机APP发送包含WiFi账号密码的UDP广播包,设备通过监听无线信道捕获数据包并解析内容[^2]。 数学表达式:数据包解码过程可建模为$$P(x|θ) = \prod_{i=1}^n f(x_i;θ)$$ 优点:无需硬件改造 缺点:依赖特定芯片(如TI CC3000) 2. **AP模式** 设备自建WiFi热点,用户手机连接热点后通过HTTP协议传输置参数。 工作流程: ```python # 伪代码示例 while not configured: start_ap_mode() if http_request_received(): save_wifi_credentials() switch_to_sta_mode() ``` 3. **蓝牙辅助** 通过BLE广播建立安全通道传输WiFi凭证,适用于智能家居设备。 协议栈关系:$$Bluetooth \subset IoT\_Protocol\_Stack$$ 4. **声波** 将WiFi信息编码为特定频率声波,通过手机扬声器与设备麦克风传输。 频率范围:$f \in [17kHz,20kHz]$ #### 二、技术文档要点 - 数据加密:推荐使用AES-128算法,密钥交换过程遵循$$K = g^{ab}\ mod\ p$$ - 超时机制:设置$T_{timeout} \leq 60s$的重试周期 - 错误处理:定义错误码映射表$$\begin{cases} 0x01:信号强度不足\\ 0x02:协议版本不匹 \end{cases}$$ #### 三、ESP32实现示例 ```arduino #include <WiFi.h> void smartConfig(){ WiFi.mode(WIFI_AP_STA); WiFi.beginSmartConfig(); while(!WiFi.smartConfigDone()){ delay(500); Serial.print("."); } Serial.println("SSID:"+WiFi.SSID()); } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值