ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

macOS下用Wireshark做Wi-Fi空口抓包:从入门到实战排障

macOS下用Wireshark做Wi-Fi空口抓包:从入门到实战排障 如果你和我一样家里或办公室总有那么几台终端明明显示“信号满格”却老是连不上 Wi-Fi或者连上了用几分钟就断一次。路由器日志、AP 后台、终端系统日志翻了个遍什么都看不出来。后来我才想明白真正出问题的环节不在 IP 层而在最后那段谁也看不见的无线电波上。要看清这段就得做 Wi-Fi 抓包准确说是 802.11 空口包分析。macOS 其实一直藏着一套非常好用的无线诊断工具配合 Wireshark不需要额外买 USB 无线网卡就能把终端和 AP 之间的空中帧完整录下来慢慢分析。这篇文章会把我日常排查终端关联慢、漫游掉线、802.1X 认证失败、Wi-Fi 6 性能异常时怎么用 Mac 抓空中包、怎么看懂空中包的经验完整写出来。适合网络运维、无线工程师、智能家居开发者以及所有对 802.11 协议好奇的人。1. 先搞明白macOS 做 Wi-Fi 空口抓包能解决什么问题1.1 空口包和普通抓包包的根本区别很多人第一次接触 Wireshark是在有线网卡或者 Mac 的 Wi-Fi 网卡上直接选 en0 开始抓。那种抓法拿到的是“本机协议栈已经处理过的包”也就是网卡已经完成 802.11 解帧、解密、把 LLC/SNAP 后面的 IP 报文交给系统之后的产物。你看到的 TCP 三次握手、HTTP 请求、DNS 查询都很有用但有一个致命盲区你永远看不到无线电波上的管理帧和控制帧。什么是管理帧Beacon 信标、Probe Request/Response、Authentication、Association Request/Response、Deauthentication、Disassociation这些都是。终端能不能找到 AP、能不能通过认证、能不能成功关联、是不是被 AP 主动踢掉全看这些管理帧。控制帧也很关键RTS/CTS、ACK、Block ACK、Power-Save Poll它们决定信道访问效率和隐藏节点问题。普通抓包永远看不到这些东西所以才会出现“AP 日志显示终端已连接终端显示也在连接但实际数据就是不通”的诡异现象。空口抓包就是直接对无线电波上的原始 802.11 帧做捕获。网卡进入监听模式后会把收到的每一个无线帧都记录下来包括管理帧、控制帧、数据帧以及帧头里的 RadioTap 信息比如信道、信号强度、数据速率、噪声底等。拿到这些你才真正站在了“物理层之上、协议栈之下”的观察点上。1.2 需要空口抓包的真实排障场景我这几年用到空口抓包的场景几乎都是普通抓包软件无解的情况。第一种是终端关联慢。手机连 Wi-Fi 总是转圈很久才弹出输入密码或者连上了但 IP 获取很慢。这时候你光看 AP 后台没用AP 记录的关联时间是毫秒级完成的可终端明明卡了三五秒。空口抓包一看可能是终端在连续发 Probe Request但 AP 一直没响应或者响应了但 Association Request 重传了好几次。第二种是终端频繁掉线。设备用着用着就掉线过几秒又自动连回来。AP 后台显示“客户端 disconnected”但真正原因可能是 AP 发了 Deauthentication也可能是终端 Power Save 模式下睡眠太久被 AP 踢掉也可能是周围同频干扰导致 ACK 丢失。这些信息只有空口包能完整反映。第三种是 802.1X 企业认证排查。公司 Wi-Fi 用 WPA2-Enterprise有人手机总是连不上AP 日志只显示“EAP 认证失败”但具体失败在哪一步是证书问题、用户名密码问题还是客户端不支持某种 EAP 方法得抓 EAPOL 报文看完整交互流程。第四种是 Wi-Fi 6 性能调优。家里换了 Wi-Fi 6 路由器 手机协商速率 2402Mbps但实际下载速度只有不到一半。这时候空口抓包能告诉你 OFDMA 资源单元到底分配了多少、Trigger 帧有没有正常调度、有没有大量重传和 BSS Color 冲突。1.3 为什么这个方案适合先用 macOS 试水常见的空口抓包方案是买支持 Monitor Mode 的 USB 网卡比如 Atheros 芯片的经典网卡或者某些 Ralink、Realtek 芯片的网卡装到电脑上再配驱动。这套方案在 Linux 上最舒服Windows 上要看驱动心情macOS 上则经常因为驱动签名问题折腾半天。macOS 的优势在于系统本身就内置了嗅探模式入口不需要额外硬件。只要你的 Mac 是近几年的型号无论他是 Intel 芯片还是 Apple SiliconWi-Fi 芯片基本都支持进入监听模式。系统自带的无线诊断工具就能完成抓包再用 Wireshark 做分析全流程零额外成本。当然它也有局限比如不能像专业网卡那样同时抓多个信道但作为日常排障和协议学习完全够用。2. 开工前的环境准备网卡确认、Wireshark 和隐藏工具2.1 确认你的 Mac 网卡和系统版本动手之前先确认两件事系统版本和 Wi-Fi 网卡型号。macOS 从 Big Sur 到 Sonoma、Sequoia无线诊断工具的入口和表现略有差异但核心功能一直在。我在 Ventura 和 Sonoma 上都试过嗅探功能依然可用。网卡型号可以用终端命令查system_profiler SPAirPortDataType输出里能找到当前 Wi-Fi 网卡的型号、固件版本、支持的信道等。比如我手上一台 M1 MacBook Air 显示的是 Broadcom 芯片一台 Intel MacBook Pro 显示的是另一款 Broadcom 网卡两者都能正常进入嗅探模式。要注意的是Apple Silicon Mac 的 Wi-Fi 驱动对监听模式的支持虽然能用但有些细节和 Intel Mac 不完全一样。比如某些 Intel Mac 的网卡在嗅探时能保留 RadioTap 的更多字段Apple Silicon Mac 则可能简化掉一部分。这些先不纠结后面踩坑部分细说。2.2 安装 WiresharkWireshark 是分析空中包的绝对主力没有替代品。安装推荐用 Homebrewbrew install --cask wireshark装完以后第一次启动可能会提示安装 ChmodBPF 或者授权访问 BPF 设备。这是 macOS 的抓包权限机制不授权的话普通用户没法抓包。界面会弹出提示按提示操作即可。如果装完发现 Wireshark 看不到任何接口大概率就是 BPF 权限没给够。这一步容易翻车的地方是很多人装的是 App Store 版或精简版 Wireshark缺少完整的命令行工具和 extcap 插件。做空口分析时后面解密、协议解析、GeoIP 这些功能都需要完整版建议老老实实用 Homebrew 装。2.3 找到 macOS 自带的无线诊断工具macOS 的无线诊断工具位置很隐蔽大部分用户压根不知道它存在。两种打开方式第一种按住键盘上的 Option 键再点击屏幕右上角菜单栏的 Wi-Fi 图标会多出来几项菜单其中就有“打开无线诊断”。第二种用 Spotlight 搜索“无线诊断”英文系统是 Wireless Diagnostics也能直接找到。实际上它的路径在/System/Library/CoreServices/Applications/Wireless Diagnostics.app打开后是一个多页签的工具界面包含性能、扫描、信息、日志、嗅探器等模块。我们要用的是“嗅探器”Sniffer。这里要提醒一句新版 macOS 上老的命令行方式已经不好使了。以前可以用sudo airport en0 sniff抓包但在新版系统上那条命令的路径经常找不到或者报错提示不支持。我后来直接放弃了命令行方案图形界面的无线诊断不仅稳定还能直观设置信道比记忆命令好用太多。3. 真正动手用无线诊断把空中包诱捕出来3.1 设置嗅探器和信道打开无线诊断工具后切到“窗口”菜单选择“嗅探器”。工具会弹出一个配置面板让你选择抓包的信道。这里有三个选项2.4GHz 频段勾选后会在 2.4GHz 全信道跳频抓包5GHz 频段同上某个具体信道比如 2.4GHz 的 6 信道或者 5GHz 的 36 信道我的建议是只要能确定终端和 AP 用的是哪个信道就一定选固定信道不要选全频段扫描。原因很简单AP 和终端的工作信道是固定的你只有待在同一个信道上才能完整捕捉它们的交互过程。如果选全频段网卡会像雷达一样不停跳信道可能正好跳到目标信道时关联流程已经走完了抓回来的包残缺不全。怎么确定目标信道如果你手上能登录 AP 后台直接在后台看。如果没有后台权限用无线诊断的“扫描”页签里面列出了周围所有 AP 的工作信道和数据速率先扫一下锁定目标 SSID 对应的信道再切回嗅探器填那个数字。设置完成后点击“开始”按钮工具会要求输入管理员密码然后网卡进入监听模式。3.2 触发连接事件断开重连和重认证抓包不是一上来就傻等。空中包文件动辄几十 MB抓几个小时意义不大你得带着问题去抓抓的是特定事件发生的那几秒。比如排查终端关联慢的问题最有效的做法在 Mac 上打开嗅探器固定目标 AP 所在信道开始抓包。拿出那台有问题的手机或 IoT 设备先打开 Wi-Fi 设置主动断开当前网络。等一两秒再让它重新连接目标 SSID。这样从 Probe Request 到 DHCP 的整个过程全部被记录在抓包文件里。你可以完整看到终端扫到 AP 用了多久、认证和关联花了多少帧、四次握手有没有重传。如果连不上一眼就能看出卡在哪一步。如果要抓 802.1X 认证流程操作逻辑一样但触发动作是“重新认证”。很多企业网络的 EAP 认证在断网重连时都会重新走一遍所以断开再重连照样有效。如果你是帮别人排查身边没有第二个能操作的终端那就直接在 Mac 自己的系统设置里把当前 Wi-Fi 断开再重连。Mac 自己就是一台终端抓自己的连接过程完全没毛病。3.3 停止抓包并导出 pcap 文件抓包时长建议控制在 2 到 5 分钟最多不超过 10 分钟。无线诊断工具会自动把数据流写入 /var/tmp 目录你不需要手动创建文件。停止抓包后打开 Finder按快捷键 Command Shift G输入/var/tmp回车。里面会看到命名类似WiFiSnap 2025-01-15 14-22-35.pcap的文件这就是抓到的原始包。双击会自动用 Wireshark 打开。我个人的习惯是先复制出来一份改成好记的文件名再开始分析。反正 /var/tmp 里的文件系统可能会清理早点备份总没错。4. Wireshark 空中包分析入门4.1 认帧管理帧、控制帧、数据帧打开抓包文件后第一次看到满屏 802.11 帧的人多半会懵和平时看的 IP 包完全是两个世界。别慌抓住一个核心逻辑就能理清802.11 把帧分成三大类Wireshark 里用wlan.fc.type字段区分。Type 0管理帧管“见面打招呼”“确认身份”“组队入队”这些事。Type 1控制帧管“我要发了”“你发吧”“收到”这些实时协调动作。Type 2数据帧真正承载网络层数据的帧。Wireshark 的显示过滤器里可以直接输入wlan.fc.type 0只看管理帧或者输入wlan.fc.type_subtype 0x08只看 Beacon 帧。我常用的一组过滤规则如下表想看的帧Wireshark 显示过滤器所有管理帧wlan.fc.type 0Beacon 信标wlan.fc.type_subtype 0x08Probe 请求/响应wlan.fc.type_subtype 0x04 || wlan.fc.type_subtype 0x05认证帧wlan.fc.type_subtype 0x0b || wlan.fc.type_subtype 0x0c关联请求/响应wlan.fc.type_subtype 0x00 || wlan.fc.type_subtype 0x01去认证帧wlan.fc.type_subtype 0x0c去关联帧wlan.fc.type_subtype 0x03数据帧wlan.fc.type 2QoS 数据帧WMMwlan.qos重传帧wlan.fc.retry 1一张抓包文件里Beacon 帧往往占很大比例因为 AP 每 100ms 就广播一次。分析连接问题时建议先把 Beacon 过滤掉或者直接用!wlan.fc.type_subtype 0x08排除眼不见心不烦。4.2 一个完整关联流程的报文长什么样拿到抓包文件想快速判断终端连接过程健不健康你得知道一条正常的连接流程长什么样。以 WPA2-PSK 家庭网络为例顺序大致是终端发送 Probe Request问“这里有 XX 这个网络吗”。AP 回复 Probe Response说“我在加密方式是这样的速率支持是这样的”。终端发 Authentication 帧认证方式通常是 Open System。AP 回 Authentication Response状态码为成功。终端发 Association Request告诉 AP“我要入网了这是我能支持的速率和能力集”。AP 回 Association Response分配 Association ID。双方开始 EAPOL 四次握手也就是 1/4、2/4、3/4、4/4 这四帧。四次握手完成后AP 通过 DHCP 给终端分配 IP终端开始正常业务通信。在 Wireshark 里怎么快速看这个流程先用显示过滤器eapol || wlan.fc.type_subtype 0x0b || wlan.fc.type_subtype 0x0c || wlan.fc.type_subtype 0x00 || wlan.fc.type_subtype 0x01 || wlan.fc.type_subtype 0x04 || wlan.fc.type_subtype 0x05把关键帧都捞出来然后按时间顺序一条条看。排查关联慢的问题时重点看相邻两个步骤之间的时间差。比如终端发了 Probe RequestAP 隔了 800ms 才回 Probe Response那问题大概率出在 AP 端或者空口环境上。再比如四次握手经常重传 2/4 或 3/4那可能是空口信号太差或者两个 STA 互相干扰。4.3 用过滤和统计快速定位问题Wireshark 顶部菜单的“统计”选项里有个“WLAN 流量”能按类型显示管理帧、控制帧、数据帧的数量分布。我第一次用这个功能时光看分布比例就知道了个大概如果管理帧比例异常高说明空口环境很差终端和 AP 在反复重试“建立关系”。另一个常用工具是“统计 - 对话”能看到每个 MAC 地址之间的帧数、丢包、延迟。配合显示过滤器wlan.addr XX:XX:XX:XX:XX:XX可以只看某个目标终端的所有收发帧。还有个很实用的技巧抓包文件里重传帧如果超过总帧数 10%基本可以断定空口环境有问题。Wi-Fi 本身基于 CSMA/CA 机制重传不可避免但比例过高就说明冲突严重、信号弱或者存在隐藏节点。5. 加密流量解密从四次握手到 Wireshark 解密5.1 为什么一定要抓到完整的四次握手现在的 Wi-Fi 网络基本都加密了抓到的数据帧载荷部分通常是密文。但你不需要灰心因为 WPA/WPA2 的解密机制很特别只要抓到四次握手的四帧又知道网络的预共享密钥PSK就能推导出后续数据加密用的临时密钥。关键点在于必须在抓包文件里包含完整的 EAPOL 四次握手。抓住了握手解密是配置的事没抓住握手神仙也解不开。所以抓包时最好在抓包进行的过程中重新触发一次连接。比如你已经连着 Wi-Fi在 Mac 上断开重连或者打开飞行模式再关闭这会让系统重新走一遍四次握手刚好被抓包工具录下来。如果你抓了一个小时都没重新连接过那就别指望解密了。也有例外情况比如网络用 WPA3-SAE 的时候握手过程换成了 SAE 的 Dragonfly 握手。Wireshark 对 WPA3 的解密支持也已经跟进但实际使用时比 WPA2 麻烦一些成功率受限于驱动和协议版本。这篇先不展开。5.2 配置 WPA 密钥还原明文数据抓到包含四次握手的 pcap 文件后在 Wireshark 里按下面几步操作打开“编辑 - 首选项 - 协议 - IEEE 802.11”。勾选“启用解密”选项。在“解密密钥”栏里点击“编辑”新增一条密钥。密钥类型选wpa-pwd密钥格式填密码:SSID。比如密码是12345678网络名是HomeWiFi就填12345678:HomeWiFi。保存配置。设置完成后Wireshark 会尝试解密所有数据帧。你再看原来的 QoS Data 帧多出来的就是一个完整的 TCP/IP 协议树甚至可以直接“右键 - 追踪 TCP 流”把某个 HTTP 请求的完整内容整理出来。这里要强调一句合规问题这套解密方式只适用于你自己的网络、你自己的 AP或者你已经获得明确授权的测试环境。拿来破解别人的 Wi-Fi 属于违法行为不讨论也不支持。我写这个字段的目的是做合法排障和协议学习大家务必注意。5.3 企业级 802.1X 认证抓包的额外工作公司网络用的是 WPA2-Enterprise 或者 WPA3-Enterprise 时四次握手里的密钥生成过程和家庭网络完全不一样。PSK 变成了通过 802.1X 认证动态生成的 PMK所以光在 Wireshark 里填一个密码根本解不开。抓 802.1X 认证流程时你要重点关注的是 EAPOL 帧里的 EAP 交互过程。具体看几步AP 发 EAPOL-Start 或 EAP-Request/Identity要求终端报上身份。终端回 EAP-Response/Identity通常是用户名。AP 发 EAP-Request 指定 EAP 方法常见有 PEAP、EAP-TLS、EAP-TTLS。终端和 RADIUS 服务器通过 AP 透传完成认证。双方生成 PMK 后开始正常四次握手。Wireshark 能直接解析 EAP 层你可以用显示过滤器eapol或eap把所有认证相关帧过滤出来按时间线看认证到了哪一步、服务器拒绝了什么。很多手机连不上企业 Wi-Fi 的问题在抓包里两分钟就能定位比如用的是 PEAP 但手机端没装证书报文里会显示服务器证书校验失败。如果你既要抓认证流程又想解开后续业务数据那就必须额外拿到 EAP-TLS 的私钥或者 PEAP 相关解密信息复杂度会高很多。日常排障我的建议是先抓认证流程解决连不上问题数据解密不是必选项。6. 实战中绕不开的坑6.1 信道跳跃导致关联包缺失我第一次用无线诊断时图省事选了“全部信道”抓了一分钟看文件大小好几十 MB心想着这下数据足够了吧。结果一过滤目标 AP 的 Beacon 帧倒是全的但 Probe Request、Association Request 这些关键帧零零散散根本连不出一条完整的连接流程。原因很简单网卡在信道间跳跃时每个信道只停留几十毫秒。而终端关联整个流程可能发生在几毫秒内网卡还在别的信道扫描自然错过了关键帧。后来我学乖了必须先通过无线诊断的“扫描”页签确认目标 AP 所在信道再回嗅探器里固定那个信道。固定信道抓包才能做到“帧帧到位”。6.2 抓包会短暂断开当前 Wi-Fi 连接很多人第一次点“开始”按钮时会被吓到Mac 的 Wi-Fi 直接断开菜单栏图标变成灰色网页全打不开。这是正常的因为网卡进入监听模式后不再参与正常网络连接系统只能暂时断开 Wi-Fi。抓完包点界面上的“停止”按钮或者直接关掉无线诊断工具再重新打开 Wi-Fi系统会自动恢复正常网络连接。这个特性对抓包流程设计有影响Mac 自己在抓包期间不能同时作为测试终端去验证网络能否上网。所以如果需要验证“能不能访问外网”得用另一台设备来测试Mac 专心负责抓包就行。6.3 时间戳、信号强度和大文件的问题空口包里的时间戳是网卡收到帧的时间不是发送端发出帧的时间。这个细节在分析延迟问题时尤其重要。比如你想判断 AP 响应是不是慢得对比请求到响应的间隔但这个间隔包含了空口传播、网卡处理、系统驱动等各环节的延迟不能直接等同于 AP 的处理时间。RadioTap 里的信号强度字段在 macOS 内置网卡抓的包里有时候是不完整的。我在 Apple Silicon Mac 上抓的包经常出现没有任何 RSSI 信息的数据帧。如果信号强度是你的核心指标那还是得用专门的 USB 嗅探网卡内置网卡只能提供参考。再说大文件。无线诊断抓包时间长一点文件很容易爆到几百 MB。Wireshark 打开几百 MB 的 pcap 已经有点吃力再配解密规则做过滤会明显卡顿。所以抓包前想清楚要抓哪个事件压缩抓包时长宁可多抓几次也不要一次抓一小时。7. 进阶观察Wi-Fi 6 空中包的 HE 字段7.1 如何在 Wireshark 里识别 Wi-Fi 6 报文如果你抓的是一个 Wi-Fi 6 网络空中包里会多出一类叫 HEHigh Efficiency的字段对应 802.11ax 协议。在 Wireshark 的协议树里能看到 IEEE 802.11 协议下面跟着一层 HE里面包含 BSS Color、HE 能力集、空间流数、MCS 速率等关键信息。快速识别的方法是用显示过滤器wlan_he它会把所有包含 HE 头的帧过滤出来。还可以看数据帧的速率字段如果出现 HE MCS 0 到 HE MCS 11 之类的标识说明协商速率已经走的是 802.11ax 那一套了。Wi-Fi 6 和 Wi-Fi 5 的包在视觉上一个很大的区别是Wi-Fi 5 的 VHT 帧和 Wi-Fi 6 的 HE 帧在 RadioTap 里的速率项完全不同。你抓一次 Wi-Fi 6 网络对比一次 Wi-Fi 5 网络很快就能找到感觉。7.2 Trigger 帧与 OFDMA 上行调度的观察Wi-Fi 6 相比上一代最大的变化之一就是 OFDMA。AP 可以把信道分成多个资源单元RU同时发给多个终端上行方向上AP 会发 Trigger 帧来调度多个终端在指定时间、指定 RU 上同时传数据。在 Wireshark 里找 Trigger 帧过滤wlan.fc.type_subtype 0x34或者直接看协议树上带着 “Trigger” 字样的帧。看到 Trigger 后紧接着一般会有多个终端的 HE Trigger-Based 帧同时出现这说明 OFDMA 上行调度在正常工作。如果抓包发现 AP 发了大量 Trigger 帧但终端响应很少那问题可能是终端太老、不支持 OFDMA或者 AP 的调度算法在某种场景下有 bug。Wi-Fi 6 路由器信号满格但跑不满速度有不少情况就出在这个调度环节上。个人体会是Wi-Fi 6 空口分析的门槛比 802.11n/ac 时代高了不少因为多了 HE 字段、RU 分配、BSS Color 这些概念但掌握基本帧结构之后用 Wireshark 一层层拆还是能看懂的。遇到看不懂的字段直接点开协议树右键选择“在数据包字节中标记”再对着十六进制数据看多试几次就熟了。最后再分享一个实际操作里的小习惯抓包前把目标终端的 MAC 地址抄下来分析时第一件事就是加一条wlan.addr 目标MAC的过滤规则把无关终端的包全部挡在外面只看目标终端的完整行为链路。这个习惯能帮你少走至少一半弯路。
返回列表