☰
从WLAN工作流程到Wireshark抓包:无线网络故障排查实战指南
2026/10/20 12:27:02 网站建设 项目流程

前几天,我还在帮某项目组排一个无线网络问题。现象很典型:会议室里新装了一台AP,手机能搜到SSID,能弹出密码框,输入密码后进度条一直转,最后提示“网络拒绝接入”。我第一反应不是去改配置,而是打开抓包软件,把整个WLAN工作流程从终端扫描到获取IP从左到右捋了一遍。结果发现,问题出在WPA2四次握手时AP下发的RSN信息元素与终端能力不匹配,导致终端的握手响应被AP静默丢弃。这类问题如果不抓包,光看AP日志或者控制器日志,基本就是大海捞针。

所以我想把自己在WLAN工作流程与抓包分析上积累的一些方法整理出来,尤其适合刚开始接触无线空口抓包的朋友。我会从无线接入的完整流程讲起,再讲抓包前的环境准备、抓包位置选择,以及如何用Wireshark逐帧定位故障,最后附上我自己踩过的坑和排查技巧。读完你至少能自己搭一套可复用的无线抓包排障套路。

1. WLAN工作流程先理清楚再抓包

1.1 从一台终端上网说起:WLAN接入到底要经过哪几步

先说结论:一台无线终端从“搜到WiFi”到“能上网”,在802.11协议层面通常要经历扫描、认证、关联、密钥协商、DHCP获取地址、正常数据传输六个阶段。很多人以为连WiFi就是输入密码就行,其实密码验证是在密钥协商阶段才发生的,前面的认证关联根本不校验密码。

  • 扫描阶段:终端主动或被动发现周围的AP。主动扫描是终端发Probe Request(探测请求),询问“有没有叫某名字的网络”;AP收到后回Probe Response(探测响应),附带自己的SSID、BSSID、支持速率、加密方式等。被动扫描则是终端在所有信道上监听AP周期性发送的Beacon(信标)帧。
  • 认证阶段:终端向AP发送Authentication Request(认证请求),AP回复Authentication Response。注意,这里叫“认证”但大部分家用场景只是开放系统认证,没有任何身份校验,就是走个流程。
  • 关联阶段:认证通过后,终端发送Association Request(关联请求),里面包含终端支持的能力、速率、所选SSID等信息;AP回复Association Response,并分配一个Association ID(AID)。到这一步,终端才算真正“接入”这个AP。
  • 密钥协商阶段:对于WPA2-Personal,关联完成后立即开始EAPOL四次握手,双方协商出一个按会话生成的密钥(PTK),后续数据帧用这个密钥加密。WPA3-Personal的密码校验也在这附近,但使用的是SAE握手。
  • DHCP获取地址:无线链路建立并加密后,终端通过DHCP协议获取IP地址,然后才能访问网络。
  • 正常数据传输:一切就绪后,终端和AP之间通过加密的数据帧通信。

这六个阶段中,只要有一个环节断了,终端就上不了网。如果你连这些阶段对应的帧类型都不清楚,抓包后看到满屏幕的802.11帧根本无从下手。

1.2 为什么抓包必须贴着工作流程去看

WLAN抓包和有线抓包最大的区别在于:有线抓包插上网线就能看到所有双向流量,而无线抓包是基于共享无线电媒介的,而且空口中的管理帧、控制帧、数据帧混杂在一起,如果不按流程逐段对照,很难定位问题出在哪一步。

我那次排障就是一个典型的例子。空口抓包后,用过滤条件分别看Probe Response、Authentication、Association、EAPOL、DHCP,很快发现:

  • 扫描正常:Probe Request / Probe Response都有;
  • 认证关联正常:Authentication和Association均成功;
  • 四次握手只有Message 1:AP发了EAPOL Message 1,但始终没有收到终端的Message 2。

这说明问题就卡在“终端收到Message 1但没正确处理”这个环节。再检查Message 1中的RSN信息元素,发现AP要求的是WPA3-SAE而非WPA2-PSK,而终端只支持WPA2。如果不抓包,这一层信息根本看不到。所以抓包前脑子里必须有一张“流程-帧-字段”的映射表,这是所有无线排障的基本盘。

2. 抓包环境准备:工具、权限和监听位置

2.1 抓包工具怎么选:监听模式是前提

主流抓包工具无外乎Wireshark、tcpdump、tshark。Wireshark图形化强,适合交互分析;tcpdump轻量,适合在无图形界面的Linux机器上抓完带回来分析;tshark是Wireshark的命令行版本,适合批量过滤。

但不管用哪个,最核心的前提是:无线网卡必须支持并进入监听模式(monitor mode)。普通网卡默认工作在受管理模式(managed mode),只能收到发往本机的帧,驱动会把管理帧、控制帧以及不属于本机的数据帧直接丢弃,这样抓到的内容只有有线网络层面的一小部分,对WLAN流程分析几乎没有价值。

  • Linux下建议使用airmon-ng或者iw命令切换监听模式。常见USB无线网卡中,基于Atheros、Ralink、MediaTek芯片的卡通常驱动支持较好。切换命令:
# 查看当前无线接口,通常是 wlan0 iwconfig # 使用 airmon-ng 将 wlan0 切换到监听模式 sudo airmon-ng start wlan0 # 切换后接口会变成 wlan0mon(因驱动不同可能不同),用 iwconfig 确认 iwconfig # 直接使用 tcpdump 抓取所有 802.11 帧并保存 sudo tcpdump -i wlan0mon -w wlan_capture.pcap
  • macOS上可以用自带的airport命令行工具抓包,例如sudo airport en0 sniff 6抓取信道6的包,但新版系统对抓包功能限制越来越多,建议还是用Linux环境配合外接USB无线网卡更稳。

  • Windows上需要借助Npcap/WinPcap以及支持监听模式的驱动,配置比较麻烦,我一般不建议用Windows做空口抓包。

2.2 抓包位置的选择:三种常用抓包方案

抓包位置决定了你能看到什么、看不到什么。我经常用的是三种方案,各有优缺点。

  1. AP侧镜像抓包:如果AP或交换机支持端口镜像,把AP的上联口镜像到一个抓包口,或者在AP和交换机之间串联一个分路器(TAP)。这种方式能抓到AP与服务器之间的有线流量,比如DHCP报文、Radius认证报文、上行HTTP流量,但看不到无线空口中的802.11管理帧和加密协商细节。它的作用更多是验证“流量是否到达了AP上联”。

  2. 空口抓包(无线监听):在目标AP附近,把抓包网卡调到与目标AP相同的信道并进入监听模式。这种方案能看到终端和AP之间的所有无线帧,包括Beacon、Probe、Authentication、Association、EAPOL和加密数据帧,是分析无线接入流程最核心的手段。缺点是一次只能监听一个信道,而且距离、干扰都会影响捕获质量。

  3. 终端侧日志抓包:在终端上开启系统日志或WiFi调试工具,能看到本机发出的帧和应用层事件,但缺少AP侧的行为,定位范围很受限。

最推荐的组合是“空口抓包 + AP侧有线镜像抓包”。空口解决无线协商问题,有线侧解决DHCP/上联问题,两边一对照,故障边界马上就清楚了。

2.3 信道选择与频段注意事项

无线抓包不像有线那样“插上就抓”,你必须知道目标AP在哪个信道工作,并让抓包网卡固定到该信道。因为一张无线网卡同一时刻只能听一个信道,除非你用的是支持多信道同步捕获的专业设备。

可以用手机上的WiFi扫描类应用,或者用抓包网卡先扫一圈周围AP的信道。Linux下可以用sudo iw dev wlan0mon scan来扫描,但注意扫描模式下抓包会中断。也可以先用受管模式扫完再切监听模式。

需要注意的是:

  • 2.4GHz信道带宽可能是20MHz或40MHz,5GHz可能是20/40/80/160MHz。抓包时通常设置主信道,也就是AP实际使用的信道,比如信道6(2.4GHz)或信道36(5GHz)。如果AP开启了80MHz带宽,终端也可能在辅信道上传输,但管理帧和关键协商帧一般都在主信道发送,所以抓主信道基本够用。
  • 5GHz存在DFS信道(如52-64、100-140等),这些信道需要避开雷达信号。如果AP检测到雷达,会动态跳频,抓包过程中数据会突然中断。抓包时如果遇到信道突变,要查一下是不是DFS切换导致。

3. 抓包分析WLAN流程的实操拆解与过滤技巧

3.1 进入监听模式并设置信道(Linux与macOS操作)

以Linux为例,进入监听模式后,还需要把信道固定到目标AP所在信道。假设目标AP在信道6:

# 查看当前接口名 iw dev # 把 wlan0mon 的信道固定在 6 sudo iw dev wlan0mon set channel 6 # 确认信道 iw dev wlan0mon info

如果不想用airmon-ng,也可以直接用iw命令在受管接口上开启monitor模式:

sudo ip link set wlan0 down sudo iw dev wlan0 set type monitor sudo ip link set wlan0 up sudo iw dev wlan0 set channel 6

macOS下用airport抓包比较直接:

# 扫描周围的无线网络 sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s # 指定信道6开始抓包,结果保存到 /tmp/airportSniff.cap sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport en0 sniff 6

抓完后,把生成的cap文件拖进Wireshark分析。注意macOS抓包格式有时需要重命名后缀为.pcap才能被Wireshark直接识别。

在Wireshark里,打开捕获选项,选择监听模式网卡,确认勾选“Capture packets in monitor mode”,如果网卡驱动不支持,这一项是灰的。设置完成后,抓包网卡的接口信息里会显示当前信道。

3.2 Wireshark关键过滤规则与帧类型对照

Wireshark的显示过滤是排障的核心工具。802.11帧主要分三类:管理帧(type=0)、控制帧(type=1)、数据帧(type=2)。管理帧里又细分为多种subtype,比如Beacon对应0x08,Probe Request对应0x04,Probe Response对应0x05,Authentication对应0x0b,Association Request对应0x00,Association Response对应0x01。

我自己常用的过滤条件我整理成了表格,方便对照。

分析目的过滤表达式对应阶段
只看Beacon帧wlan.fc.type_subtype == 0x08被动扫描
只看Probe请求/响应`wlan.fc.type_subtype == 0x04
只看认证帧wlan.fc.type_subtype == 0x0b认证
只看关联请求/响应`wlan.fc.type_subtype == 0x00
只看解除关联/解除认证`wlan.fc.type_subtype == 0x0a
只看EAPOL(四次握手)eapol密钥协商
只看DHCPbootp获取IP
只看数据帧wlan.fc.type == 2数据传输
只看某个APwlan.bssid == aa:bb:cc:dd:ee:ff按BSSID过滤

我的习惯是先将BSSID过滤出来,再叠加帧类型过滤,这样可以排除同一信道其他AP的干扰。比如:

wlan.bssid == aa:bb:cc:dd:ee:ff && (wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol || bootp)

这串过滤只显示目标AP的Beacon、Probe Response、EAPOL和DHCP,流程中关键的帧一目了然。

3.3 一个完整的WLAN接入流程抓包实例分析

我在这里构造一个典型的WLAN接入流程,帮助你理解帧的先后顺序。假设网络SSID叫“Office-Demo”,密码已知且正确,使用WPA2-PSK加密,抓包网卡固定在信道6。

抓包后,按时间顺序,你会看到这样一组帧:

时间线帧类型关键信息
0.000sProbe RequestSSID=Office-Demo,802.11能力
0.001sProbe ResponseBSSID、SSID、支持速率、RSN IE
0.015sAuthentication开放系统认证,认证算法=0
0.016sAuthentication ResponseStatus=0(成功)
0.018sAssociation RequestSSID、支持的速率、HT能力
0.019sAssociation ResponseStatus=0,AID=1
0.020sEAPOL Message 1AP发送ANonce,包含RSN信息
0.026sEAPOL Message 2终端回复SNonce和MIC
0.030sEAPOL Message 3AP确认MIC,发送GTK
0.032sEAPOL Message 4终端最终确认
0.045sDHCP Discover终端请求IP
0.046sDHCP Offer服务器提供IP
0.048sDHCP Request终端选择Offer
0.049sDHCP ACK分配完成,可以上网

逐个看关键字段:

  • Probe Response里的RSN Information:可以看到AP支持的安全协议,比如WPA2-PSK CCMP。终端看到这个字段才决定是否继续接入。
  • Authentication中的Status code:0表示成功,非0失败。
  • Association Response中的AID:关联成功后AP会给终端一个编号。
  • EAPOL帧里的Key Descriptor:WPA2用EAPOL-Key格式,关键字段是Key Nonce和Key MIC。Message 1和Message 3中的Nonce不同,Message 2和Message 4包含MIC。
  • DHCP帧源地址:Discover的源IP是0.0.0.0,Offer的目的IP是分配给终端的IP,可以确认AP是否把DHCP报文正确转发。

如果抓包只看到EAPOL Message 1和Message 2,然后AP直接发了一个Disassociation帧,往往意味着握手失败。如果看到了Message 1和Message 2但Missing Message 3,则可能是AP侧没有计算成功,需要检查AP上的预共享密钥或RSN配置。

3.4 解读WPA2/WPA3四次握手的关键字段

WPA2个人版的四次握手,本质上是让终端和AP证明“双方都知道同一个预共享密钥(PSK)”,并由此派生出会话密钥PTK。

  • Message 1:AP发给终端一个随机数ANonce,同时携带AP的RSN信息。
  • Message 2:终端收到后用PSK、ANonce、SNonce、双方MAC地址通过PBKDF2算法算出PTK,然后用自己的PMK派生的MIC回复SNonce。如果AP验证这个MIC通过,就说明终端的密码是对的。
  • Message 3:AP确认MIC无误后,下发Group Temporal Key(GTK)和重传的ANonce,同样带上MIC。
  • Message 4:终端确认收到GTK,整个握手完成。

抓包时如果看到EAPOL帧,Wireshark上方会显示“Key MIC”是否有效。如果密码不对,Message 2的MIC验证失败,AP会直接回一个Deauthentication帧,原因码通常是0x0f或0x0e。如果你在抓包中看到Message 2没有MIC校验信息,说明Wireshark没有正确解析,需要确认EAPOL帧是否完整,或者网络被PMF干扰。

WPA3-Personal下的情况则不同。WPA3使用SAE握手,在开放认证阶段就会交换SAE Commit和Confirm,之后再进行标准四次握手。如果看到Authentication帧中带有SAE字段,说明AP开启了WPA3。旧版Wireshark解析可能会不完整,记得更新到最新版本。

4. 常见问题与排查技巧实录

4.1 为什么抓不到握手包或某些管理帧

这是最常遇到的问题。抓了半天,只看到Beacon帧,就是没有目标终端的Probe、Auth或EAPOL。我遇到过的原因主要有这几种:

信道没对准。AP可能在信道44,而抓包网卡监听信道6,当然看不到。先用扫描工具确认目标AP当前工作信道,再切换监听信道。

**网卡驱动过滤。**有些网卡即使进入监听模式,驱动仍可能丢弃带FCS错误的帧或控制帧。检查抓包时Wireshark是否有大量坏帧,如果有,可能是信号太差、与AP距离太远,或者有干扰。抓包网卡最好贴近终端或AP,能稳定收到-70dBm甚至更强的信号。

**PMF的影响。**支持802.11w(管理帧保护)的AP开启PMF后,对Protected Management帧进行加密或签名。普通监听网卡可能无法解析其中的内容,导致你期待的Authentication、Deauthentication等帧显示异常或者干脆看不到。此时需要降级抓包方式:在AP侧看日志,或者关闭PMF做对比测试。

**终端的隐私模式。**现在很多手机默认MAC随机化,Probe Request里的地址每次连接可能都不同,导致在用BSSID过滤时漏掉。如果明明看到很多帧,但过滤结果为空,先取消BSSID过滤,按信道直接浏览所有帧,再用终端的临机MAC地址作为wlan.sa/wlan.da过滤。

4.2 关联后马上断开:从帧类型和reason code找原因

关联之后立刻出现Deauthentication或Disassociation,是无线故障中的典型现象。这时候要重点抓关联和断开之间的所有帧,并查看断开帧的reason code。

常见reason code对照如下:

Reason Code含义常见场景
0x00保留一般不用
0x01非指定原因厂商自定义时多
0x04不活跃(inactivity)终端长时间无流量,AP主动断开
0x07未认证的站点认证状态丢失,或者发数据帧前没完成关联
0x0d无效信息元素AP与终端能力协商不匹配
0x0eMIC失败密钥错误,四次握手失败的可能性高
0x0f四次握手超时最常见,密码错误或RSN不匹配导致终端未完成握手
0x10组密钥握手超时组播/广播密钥更新问题
0x11握手时信息元素不同加密方式不匹配,比如WPA2终端连WPA3-only的AP

每次看到deauth或disass,首先展开断开帧的Reason code字段,再回头数一下这个帧之前完成了哪几步。如果Reason code是0x0f,基本锁定在四次握手阶段,那就去核对密码和RSN IE。

另外,如果关联请求被拒绝,AP返回的Association Response里的status code(不是reason code)也很有用,比如0x0b表示终端要求的能力AP不支持,0x12表示AP资源不足。

4.3 加密数据怎么看:PSK解密与PMF的影响

空口抓包默认看到的是加密数据帧,只能看到帧头,看不到TCP/UDP内容。如果需要分析应用层数据,可以用Wireshark解密WPA2-PSK流量。

前提是你知道SSID和密码,并且抓包文件里包含完整的四次握手帧。步骤是:Wireshark菜单 → Edit → Preferences → Protocols → IEEE 802.11 → Decryption Keys,点击New,输入密码:SSID,比如admin123:Office-Demo,选择wpa-pwd,保存后重新打开capture文件,Wireshark会自动推导PTK解密数据帧。

解密后,你会在Wireshark的Packet Details中看到De-encrypted的TCP、HTTP等协议内容。注意:

  • 如果抓包时错过了完整的四次握手,即使有密码也无法解密(无法推导出随机数)。可以重新抓包。
  • 如果AP开启了PMF(Protected Management Frames),解密范围主要覆盖数据帧和部分管理帧,但未受保护的管理帧仍可能看不到。
  • 如果使用WPA3-SAE,Wireshark需要支持SAE的推导,而且需要捕获完整的SAE握手。最新版本Wireshark已经可以处理,但旧版本会报错。

解密只是分析手段,不要依赖它。定位无线接入流程问题,重点还是看未加密的管理帧和EAPOL帧。

4.4 关于抓包姿势:空口抓包和AP侧镜像抓包一定要配合

这是我自己踩过很多坑之后的习惯变化。只靠空口抓包,你会漏掉“有线侧有没有异常”这个关键信息。只靠AP镜像抓包,你又看不到无线协商过程。两种方案必须互补。

举个例子。有一次我碰上“连接成功但无法打开网页”的问题。空口抓包显示:Probe、Auth、Assoc、四次握手全部完成,DHCP Request也从终端发出来了,但DHCP ACK一直没收到。从空口看,AP似乎没有把DHCP Offer回给终端;再抓AP上联口的镜像流量,发现DHCP Offer其实已经从交换机进入了AP的上联口。问题出在AP内部,它没有把Offer从无线口转发出去。这种边界定位,单靠任何一边都推不出来。

还有一个实用小技巧:如果抓包时总收到噪杂的无关帧,可以先在目标终端上打开飞行模式再关闭,触发一次干净的重新接入流程。这样抓包文件里的时间线会非常清晰,滤除闲杂流量。另外,如果手机支持,可以临时设置固定的MAC地址(有些安卓机型可以),方便按wlan.sa过滤。

最后再分享一个小经验:我现在的排障习惯是,无论问题多简单,先抓一次包,按wlan.bssid过滤出目标AP,然后只看管理帧和EAPOL/DHCP,把整个流程的帧数一遍。你会发现很多“时好时坏”“偶发断连”的问题,其实在帧序列上的异常点都能找到。无线网络的问题是协议层面的,只有跳到协议层面去看,才不会被表象带偏。希望这套抓包+流程分析的思路,能帮你在下次遇到无线故障时,少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询