4. 认证与关联过程:开放系统认证、共享密钥认证、关联请求/响应帧分析
说到WiFi连接,很多人以为就是输个密码连上去就完了。其实在握手之前,还有两个关键步骤——认证和关联。这两个过程决定了你的设备能不能接入这个AP,以及接入后怎么通信。
我刚开始做无线抓包时,也经常跳过这两个帧,直接去看四次握手。后来有一次排查一个“能连上但上不了网”的诡异问题,才发现是关联阶段的参数没对齐。嗯,从那以后我再也不敢小看这几步了。
4.1 认证阶段:两种方式,天差地别
认证,说白了就是AP问客户端:“你是谁?凭什么连我?”
802.11标准定义了两种认证方式:开放系统认证和共享密钥认证。虽然现在WPA/WPA2已经普及,但理解这两种基础认证,对抓包分析依然很重要。
4.1.1 开放系统认证
开放系统认证,名字听着挺唬人,其实流程简单到离谱——客户端发个认证请求,AP直接回个认证响应,就完了。没有任何加密,没有任何校验。
你想想看,这跟“门卫问你是谁,你说我是我,门卫说请进”有什么区别?
抓包时你会看到两个帧:
- Authentication Request(客户端 → AP):认证算法=0(开放系统),序列号=1
- Authentication Response(AP → 客户端):认证算法=0,状态码=0(成功)
我在项目中遇到过不少次,有人把开放系统认证和“没有密码”划等号。其实不是。开放系统认证只是说“认证过程不校验”,但后续的关联和加密阶段仍然可以配置WPA2。很多公共WiFi用的就是开放系统认证 + 后续的Portal认证。
关键点:开放系统认证 ≠ 无加密。它只是认证阶段不校验,加密可以在关联后通过WPA/WPA2协商。
4.1.2 共享密钥认证
共享密钥认证就稍微复杂一点了。它基于WEP的共享密钥,流程是“挑战-响应”模式:
- 客户端发认证请求(算法=1,共享密钥)
- AP回复一个挑战文本(Challenge Text,128字节随机数)
- 客户端用WEP密钥加密挑战文本,发回AP
- AP解密验证,如果匹配则回复成功
这个流程看着挺安全对吧?其实有个致命漏洞——挑战文本是明文传输的,加密后的结果也是明文传输的。攻击者只要抓到这两个帧,就能通过已知明文攻击破解WEP密钥。
注意:共享密钥认证已经被证明不安全。WEP本身就有严重漏洞,加上这个认证过程会暴露明文-密文对,更是雪上加霜。我个人建议,任何生产环境都不要使用共享密钥认证。
抓包时区分这两种认证很简单:看Authentication Algorithm字段。0是开放系统,1是共享密钥。
4.2 关联阶段:建立真正的连接
认证通过后,客户端还需要和AP建立关联。关联才是真正让客户端“加入”这个BSS的过程。
我打个比方:认证是门卫确认你可以进小区,关联是物业登记你的车牌号、分配停车位。没有关联,你连小区门都进不去。
4.2.1 关联请求帧
客户端发起的关联请求帧,里面携带了它的能力信息。AP会根据这些信息决定是否接受关联。
关键字段包括:
| 字段 | 说明 | 抓包关注点 |
|---|---|---|
| Capability Information | 能力信息(ESS/IBSS、短前导码、信道宽度等) | 检查ESS位是否为1 |
| Listen Interval | 监听间隔(省电模式下唤醒周期) | 值太大可能导致AP缓存数据溢出 |
| SSID | 要关联的SSID | 确认客户端连的是对的SSID |
| Supported Rates | 支持的速率集 | AP必须支持客户端的所有基本速率 |
| HT Capabilities / VHT Capabilities | 802.11n/ac能力 | 检查MCS、信道带宽、短GI等 |
抓包时,关联请求帧的Frame Control字段中,Type=0(管理帧),Subtype=0(关联请求)。
4.2.2 关联响应帧
AP收到关联请求后,会检查客户端的参数是否兼容。如果没问题,就回复关联响应帧,分配一个Association ID(AID)。
AID是AP给客户端分配的唯一标识,范围是1-2007。这个ID在省电模式、帧缓冲等场景中会用到。
关联响应帧的关键字段:
- Status Code:0表示成功,其他值表示失败原因
- Association ID:AP分配的AID
- Supported Rates:AP确认的速率集
- HT/VHT Operation:AP的HT/VHT操作参数
实战技巧:抓包时如果看到关联响应帧的Status Code不是0,别急着怀疑AP。常见原因有:客户端请求的速率AP不支持、SSID不匹配、或者AP的关联表满了。我遇到过最奇葩的一次,是客户端发了错误的SSID长度字段,导致AP直接拒绝关联。
4.3 完整流程与抓包分析
把认证和关联串起来,完整的连接流程是这样的:
4.4 抓包实战:如何捕获认证与关联帧
说了这么多理论,咱们来点实际的。怎么在Wireshark里快速定位这些帧?
我常用的过滤表达式:
# 只看认证帧(包括请求和响应)
wlan.fc.type_subtype == 0x000b || wlan.fc.type_subtype == 0x000c
# 只看关联请求和响应
wlan.fc.type_subtype == 0x0000 || wlan.fc.type_subtype == 0x0001
# 或者更简单:只看管理帧
wlan.fc.type == 0
# 再配合BSSID过滤
wlan.bssid == xx:xx:xx:xx:xx:xx
抓包时有个小技巧:把信道固定在AP所在信道上,然后在客户端发起连接的同时开始抓包。这样能确保抓到完整的认证-关联过程。
实战案例:有一次我排查一个“连接慢”的问题,抓包发现客户端连续发了3次关联请求,AP才回复。仔细一看,前两次关联请求的Supported Rates字段里包含了一个AP不支持的速率。客户端重试时调整了速率集,第三次才成功。这就是典型的参数不兼容问题。
4.5 常见问题与避坑指南
做无线抓包这么多年,我总结了一些认证关联阶段的常见坑:
- 认证通过但关联失败:检查AP的关联表是否已满(一般支持200-500个客户端)
- 关联成功但无法通信:检查关联响应中的AID是否为0(0表示无效)
- 频繁重关联:可能是信号弱导致AP主动解除关联,或者客户端在漫游
- 共享密钥认证失败:检查WEP密钥是否配置正确,但更建议直接换WPA2
曾经踩过的坑:有一次我在实验室做测试,发现某个客户端总是关联失败。抓包一看,关联请求帧的SSID字段长度是32字节,但实际SSID只有10个字符。客户端驱动在构造帧时把整个缓冲区都填进去了,导致AP解析SSID时校验失败。嗯,从那以后我养成了习惯——抓包时一定展开SSID字段看看实际内容。
认证和关联是WiFi连接的基石。虽然现在大部分场景都是WPA2/WPA3的PSK认证,但理解开放系统和共享密钥的原理,能帮你更好地分析抓包数据。尤其是当你遇到“连不上”的问题时,先看认证状态码,再看关联状态码,基本就能定位90%的问题。