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. 客户端发认证请求(算法=1,共享密钥)
  2. AP回复一个挑战文本(Challenge Text,128字节随机数)
  3. 客户端用WEP密钥加密挑战文本,发回AP
  4. 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 完整流程与抓包分析

把认证和关联串起来,完整的连接流程是这样的:

WiFi认证与关联完整流程 客户端(STA) 接入点(AP) ① 认证请求(开放/共享) ② 认证响应(成功/失败) ③ 挑战文本(仅共享密钥) ④ 加密挑战响应(仅共享密钥) ⑤ 关联请求(能力信息、SSID、速率等) ⑥ 关联响应(状态码、AID、操作参数) ⑦ 连接建立,开始数据通信 虚线箭头仅适用于共享密钥认证;开放系统认证只有步骤①和② 关联成功后,AP会分配AID,客户端正式加入BSS

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%的问题。