WiFi认证过程及AP与STA连接关系的获取

本文详细介绍了802.11协议的帧格式及其三种主要帧类型:数据帧、控制帧和管理帧。同时,还阐述了STA接入AP的过程,包括扫描、认证和关联三个阶段,并探讨了如何获取区域内STA与AP间的连接关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、802.11协议

802.11协议簇是为无线局域网络制定的标准,相关的协议如下:

这里写图片描述

802.11帧格式:

    一般802.11帧分为头部、数据部分和校验码部分,帧头部又主要包括:帧控制域、持续时间/标识、地址域和序列控制域。根据类型的不同又可以分为三类:数据帧、控制帧、管理帧:
    1、数据帧:负责在工作站之间数据传输,可能因为所处的网络环境不同而有所差异。
    2、控制帧:为数据帧服务,负责区域的清空、信道的获取、载波侦听的维护以及在接收到数据时予以确认,从而达到提高工作站之间数据传送的可靠性。
    3、管理帧: 监督管理作用,主要用于加入、退出无线网络和接入点之间关联的转移等。

二、STA接入AP过程:

    在STA和AP之间传送数据之前,需要三个阶段才能完成接入:扫描、认证和关联:

这里写图片描述

扫描阶段:

(1)主动扫描:在每个信道上发送Probe request探测帧,从Probe response中获取AP信息;这种方式发现AP的速度快;
(2)被动扫描:侦听AP定期发送的Beacon帧,通过Beacon中包含的信息来获取AP的一些基本信息;这种方式速度慢,但是STA省电;

认证阶段:

(1)Open-system Authentication:等同于不需要认证,没有安全防护能力
(2)Shared-Key Authentication:采用WEP加密算法,另外STA可以通过Deauthentication来终结认证关系

关联阶段:

(1)Association:STA通过Association和一个AP建立关联,后续 的数据报文的收发只能和建立Association关系的AP进行
(2)Reassociation:STA在从一个老的AP移动到新AP时通过Reassociation和新AP建立关联,不过Reassociation前必须经历Authentication过程
(3)Deassociation:STA通过Deassociation和AP解除关联关系

三、获取区域内STA和AP之间的连接关系

方式一(70%):

    捕获区域内的数据帧,解析捕获到的数据帧,得到该数据帧的目的地址和源地址,在通过数据帧中的toAP和fromAP标志位来区分目的地址和源地址哪个是AP,哪个是STA;

方式二(30%):

    捕获区域内的Beacon帧,Beacon帧的源地址一定是AP,从而获取到区域内的一个AP列表;
    捕获区域内的Probe request帧,源地址是区域内的设备(捕获到该帧并不能确定设备是否有连接到某个AP),获取到区域内的一个设备列表;
    最后通过捕获区域内的控制帧,用控制帧中解析出来的目的地址和源地址,去匹配之前得到的AP列表和设备列表,从而得出STA和AP之间的连接关系;
<think>嗯,用户的问题是关于如何在ESP32未连接WiFi时开启AP热点,并通过该热点配置WiFi名称密码,实现自动保存连接。首先,我需要回顾ESP32的WiFi工作模式,记得它有STA(站点)模式AP接入点)模式,可能还需要同时使用两种模式,即AP+STA模式。 用户提到当ESP32未连接WiFi时开启AP热点。这意味着需要先尝试连接预设的WiFi,如果失败则启动AP模式。可能需要检查WiFi连接状态,如果连接失败,触发AP模式的启动。同时,用户希望通过AP热点来配置新的SSID密码,并自动保存这些信息,以便下次尝试连接。这涉及到将用户输入的凭证存储到非易失性存储(NVS)中,这样即使重启也能保留配置。 接下来,我需要考虑如何实现AP热点的配置。参考引用中的代码示例,设置AP模式需要配置wifi_config_t结构体,指定SSID、密码、频道等参数。然后注册事件处理函数来处理客户端的连接事件,比如当手机连接AP时,可能需要提供一个网页让用户输入新的WiFi信息。 自动保存部分,需要使用NVS库来存储SSID密码。当用户通过AP提交新的凭证后,程序应将这些信息写入NVS,并在下次启动时读取,尝试连接。如果连接成功,则进入STA模式;否则,再次开启AP模式。 还需要处理WiFi事件,比如当STA连接失败时触发某个事件,这时启动AP。事件处理函数可能需要注册多个实例,分别处理STAAP的事件。例如,当STA断开连接连接失败时,切换到AP模式。 用户可能还希望有一个配置界面,比如Web服务器,当ESP32处于AP模式时,手机连接后可以访问一个配置页面,输入新的WiFi信息。这部分需要实现一个简单的HTTP服务器,处理POST请求,获取SSID密码,并保存到NVS。 另外,引用中提到使用Esptouch这样的应用进行配置,但用户可能希望自己实现类似的逻辑,而不是依赖第三方应用。因此,需要手动处理配置过程,可能通过网页表单。 综合这些步骤,代码结构可能包括初始化NVS、设置WiFi模式、尝试连接已保存的SSID,失败后启动AP,运行Web服务器接收配置,保存配置并重启以尝试连接。需要确保代码正确处理各种事件,如连接成功或失败,并适时切换模式。 还需要注意AP模式的参数设置,比如最大连接数、认证模式,以及如何处理多个客户端的连接。此外,安全性方面,AP的密码应使用WPA2加密,避免明文传输。 最后,测试环节可能需要实际使用手机连接ESP32的AP,访问配置页面,输入新的WiFi信息,验证是否能成功保存并自动连接。同时,检查NVS中存储的数据是否正确,以及重启后的行为是否符合预期。</think>### ESP32配置WiFi AP热点自动连接教程 **1. 核心逻辑说明** 当ESP32未连接预设WiFi时,需执行以下流程- 初始化非易失性存储(NVS)保存网络配置 - 进入AP模式创建配置热点 - 搭建Web服务器接收WiFi凭证 - 自动保存配置并尝试连接 **2. 关键代码实现** ```c #include <WiFi.h> #include <WebServer.h> #include <Preferences.h> Preferences preferences; WebServer server(80); // 尝试连接已保存的WiFi bool connectSavedWifi(){ String ssid = preferences.getString("ssid", ""); String pass = preferences.getString("pass", ""); if(ssid == "") return false; WiFi.begin(ssid.c_str(), pass.c_str()); return (WiFi.waitForConnectResult() == WL_CONNECTED); } // AP模式配置热点 void startConfigAP(){ WiFi.softAP("ESP32_Config", "config123"); // AP热点配置 server.on("/", HTTP_GET, [](){ // 配置页面 server.send(200, "text/html", "<form action='/save'>" "SSID:<input name='ssid'><br>" "密码:<input name='pass'><br>" "<input type='submit'></form>"); }); server.on("/save", HTTP_GET, [](){ // 保存配置 String ssid = server.arg("ssid"); String pass = server.arg("pass"); preferences.putString("ssid", ssid); preferences.putString("pass", pass); server.send(200, "text/plain", "配置已保存,正在连接..."); delay(1000); ESP.restart(); }); server.begin(); } void setup(){ preferences.begin("wifi-config", false); if(!connectSavedWifi()){ WiFi.mode(WIFI_AP_STA); // 同时启用AP+STA模式[^2] startConfigAP(); } // 连接成功后执行其他初始化 } void loop(){ server.handleClient(); } ``` **3. 关键机制说明** - **NVS存储**:使用Preferences库永久保存SSID/密码,断电不丢失[^1] - **双模共存**:`WIFI_AP_STA`模式允许同时运行热点连接路由器[^2] - **自动回连**:重启后优先尝试连接已保存的WiFi - **Web配置**:通过表单页面实现免APP配置,兼容任何浏览器设备[^3] **4. 优化建议** - 添加连接超时检测(建议15秒) - 实现AP模式下LED状态指示 - 增加配置信息加密存储 - 添加多组网络配置支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值