3、Wi-Fi协议抓包:Wi-Fi帧结构、Beacon帧、Probe帧、数据帧抓包分析

好,咱们进入Wi-Fi抓包的正题了。前面两章我们把工具和环境搭好了,现在该看看空中到底在传什么。

Wi-Fi抓包,说白了就是监听802.11帧。你想想看,手机、路由器、智能灯泡之间通信,全靠这些帧在空气里飞来飞去。我刚开始做物联网安全时,总觉得Wi-Fi协议很复杂,后来发现——只要抓住几个关键帧类型,大部分问题都能定位。

3.1 Wi-Fi帧结构:三层头,一个身

每个802.11帧都长一个样。我习惯把它拆成三部分:

  • MAC头(Frame Control + Duration + Addresses)
  • 帧体(可变长,承载实际数据)
  • FCS(4字节校验,看帧有没有被干扰)

其中MAC头里的Frame Control字段最关键。它只有2字节,但决定了这个帧是干啥的。

Frame Control字段结构(2字节):

  • Protocol Version (2 bits) — 固定00
  • Type (2 bits) — 管理帧/控制帧/数据帧
  • Subtype (4 bits) — 具体类型,比如Beacon、Probe Request
  • To DS / From DS (各1 bit) — 方向标志,决定Address字段含义
  • 其他标志位:More Frag、Retry、Power Management等

嗯,这里要注意:Type + Subtype组合起来才能确定帧类型。比如Type=00, Subtype=1000就是Beacon帧。我当年在调试一个智能插座时,发现它连不上网,抓包一看——它一直在发Probe Request,但AP根本不回Probe Response。后来发现是信道没对上。

3.2 Beacon帧:AP的“我在呢”广播

Beacon帧是AP定期发送的信标。说白了就是AP在喊:“我在这儿,我叫XX,支持这些功能,快来连我!”

抓包时,Beacon帧的特征很明显:

  • 目的地址是广播地址(FF:FF:FF:FF:FF:FF)
  • 源地址是AP的MAC
  • BSSID就是AP的MAC
  • 帧体里携带大量信息元素(Information Elements, IE)

我一般用Wireshark过滤 wlan.fc.type_subtype == 0x08 来只看Beacon。你打开一个Beacon帧,会看到这些关键字段:

字段 说明 抓包时关注点
Timestamp AP的64位时间戳 用于同步,偏差大说明AP时钟不准
Beacon Interval 发送间隔(单位TU,1TU=1024μs) 默认100TU≈102.4ms,改小会增加空口开销
Capability Information AP能力标志(ESS、IBSS、加密等) 看是否支持WPA2/WPA3
SSID 网络名称 隐藏SSID时此字段为空
Supported Rates 支持的速率集 老设备只支持1/2/5.5/11 Mbps
RSN Information WPA/WPA2/WPA3安全参数 看加密套件、AKM套件
HT / VHT / HE Capabilities 802.11n/ac/ax能力 看是否支持MIMO、信道带宽

实战技巧:抓Beacon帧可以快速发现“假AP”。我曾经在客户现场抓到过一个Beacon,SSID和公司官方Wi-Fi一模一样,但BSSID不同,RSN信息里加密套件也不对——典型的Evil Twin攻击。Beacon帧是Wi-Fi安全审计的第一道防线。

3.3 Probe帧:客户端在“找网”

Probe帧分两种:Probe Request(客户端发)和Probe Response(AP回复)。

客户端想连Wi-Fi时,会发Probe Request。它有两种模式:

  • 主动扫描(带SSID):客户端指定要连哪个网络,比如“有没有叫Office_WiFi的?”
  • 主动扫描(空SSID):客户端广播“附近有哪些AP?报上名来!”

我习惯用 wlan.fc.type_subtype == 0x04 过滤Probe Request,用 0x05 过滤Probe Response。

抓包时你会发现,手机在息屏状态下也会定期发Probe Request。这其实是个隐私问题——因为Probe Request里携带了客户端的MAC地址,攻击者可以跟踪你的移动轨迹。所以现在iOS和Android都默认用随机MAC发Probe Request了。

避坑指南:我曾经调试过一个IoT设备,它连不上公司Wi-Fi。抓包发现它一直在发Probe Request,但AP就是不回Probe Response。查了半天,原来是设备只支持2.4GHz,而AP的2.4GHz射频坏了。Probe Request发出去,AP收不到,自然没回复。所以抓包时不仅要看客户端发的,还要确认AP有没有回应。

3.4 数据帧:真正的“货”

数据帧就是真正传数据的帧。你上网、看视频、传文件,全靠它。

数据帧的Type=10(二进制),Subtype=0000。但数据帧里最关键的字段是To DS和From DS:

To DS From DS 含义 Address1 Address2 Address3
0 0 IBSS(Ad-hoc) DA SA BSSID
1 0 从客户端到AP BSSID SA DA
0 1 从AP到客户端 DA BSSID SA
1 1 WDS桥接 RA TA DA

嗯,这里要注意:数据帧的Address字段含义会变。你抓包时看到三个MAC地址,别搞混了。我刚开始学的时候,经常把SA和DA看反,后来养成习惯——先看To DS和From DS,再确定每个Address代表什么。

数据帧的帧体里,如果没加密,直接就是IP包。如果加密了(比如WPA2),帧体就是加密后的数据,Wireshark默认显示为“802.11 CCMP”或“TKIP”数据。要解密,你得有密码或PMK。

3.5 抓包实战:三步定位法

我总结了一套抓包定位问题的流程,分享给你:

  1. 看Beacon:确认AP是否存在、信道对不对、加密方式是否匹配
  2. 看Probe:确认客户端在找哪个网络、AP有没有回应
  3. 看数据帧:确认连接建立后,数据是否正常传输

举个例子。有一次客户说智能门锁连不上Wi-Fi。我抓包一看:

  • Beacon帧正常,AP在信道6上广播
  • 门锁发Probe Request,带SSID,AP回了Probe Response
  • 但接下来门锁发了一个空数据帧(Null Function),然后就没动静了

问题出在哪?空数据帧是Power Management位被置1,表示门锁要进入省电模式。但AP没正确处理,导致门锁一直睡不醒。后来升级了AP固件就好了。

你看,抓包不是瞎抓,要有思路。Beacon、Probe、数据帧,这三类帧覆盖了Wi-Fi连接的三个阶段:发现、扫描、数据传输。抓住它们,大部分问题都能定位。

核心要点:

  • Wi-Fi帧结构:MAC头 + 帧体 + FCS,Frame Control决定帧类型
  • Beacon帧:AP广播,包含SSID、速率、加密、能力信息
  • Probe帧:客户端主动扫描,AP回复
  • 数据帧:To DS/From DS决定地址含义,加密后帧体不可读
  • 抓包定位:Beacon→Probe→数据帧,三步走
Wi-Fi抓包分析核心流程 抓包准备 捕获Beacon帧 分析Beacon信息 捕获Probe帧 捕获数据帧 关键检查点 • SSID是否匹配 • 信道是否正确 • 加密方式是否支持 • AP是否回应Probe • 数据帧是否加密

这张图就是我的抓包分析流程。从抓包准备开始,按顺序捕获Beacon、Probe、数据帧,每一步都有检查点。你按这个流程走,基本不会漏掉关键信息。