Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

CaptureSetup/WLAN

本页用于判断在 WLAN / Wi-Fi / IEEE 802.11 上抓包时,能看到什么、看不到什么,以及何时需要 monitor mode。它适合以下场景:

目标关键判断
只抓本机上网流量通常直接在无线接口上捕获即可
想看 802.11 管理帧、控制帧通常需要 monitor mode 和支持的适配器/驱动
想看信号强度、速率等无线电信息通常需要 802.11 + radio 头,且依赖平台支持
想抓其他主机之间的无线流量通常需要 monitor mode;还要调到正确 channel
Windows 上抓原始 802.11取决于 Npcap、无线网卡和驱动;WinPcap 不支持 monitor mode

容易混淆的点:

  • 默认 WLAN 捕获经常只显示“伪造 Ethernet 头”的数据包,不代表已经抓到了真实 802.11 头。
  • Promiscuous mode 和 monitor mode 不是一回事;在 802.11 上,promiscuous mode 通常不能替代 monitor mode。
  • monitor mode 只能捕获当前调谐 channel 上的流量;无线网卡不在某个 channel 上,就会漏掉该 channel 的包。
  • 是否能进入 monitor mode,取决于操作系统、无线适配器、驱动和 libpcap/Npcap 支持;不能只看 Wireshark UI。
  • 在受保护的无线网络中,即使抓到其他主机的帧,也可能无法解密其内容。

先判断你需要哪种捕获

你想看到什么通常需要的模式可能看到的链路层头主要限制
本机收发的普通 IP/TCP/UDP 流量普通无线接口捕获伪造 Ethernet 头看不到完整 802.11 头、管理帧、控制帧和无线电信息
当前 SSID 内更多数据帧Promiscuous mode 可能有帮助可能仍是伪造 Ethernet 头802.11 上经常不起作用或效果有限
管理帧、控制帧、其他 BSS/SSID 流量Monitor mode802.11 头或 802.11 + radio 头依赖平台和硬件;可能导致无线接口断开关联
信号强度、数据速率等无线电层信息Monitor mode 或平台支持的 radio 头Radiotap、AVS、Prism、BSD radio 等并非所有平台和适配器都提供

WLAN 捕获为什么容易“不完整”

802.11 是广播介质,但无线适配器和驱动会在接收端做多层过滤:

过滤维度默认行为对抓包的影响
Channel只接收当前调谐 channel 的无线帧其他 channel 的流量不会出现
SSID / ESSID普通模式下只向主机交付当前加入网络相关的包其他 SSID 的流量通常不可见
目的 MAC 地址交付发给本机、相关 multicast 或 broadcast 的包其他主机之间的 unicast 通常不可见
驱动转换数据帧可能被转换为伪造 Ethernet 帧802.11 头字段和无线电信息丢失
管理帧 / 控制帧多数驱动会丢弃,不交给捕获机制普通模式下通常看不到

结论:默认设置下捕获到的 WLAN 包可能已经被修改,而且只覆盖无线介质上的一部分流量。

包类型与头部

数据包

数据包承载普通网络协议。默认情况下,许多适配器或驱动会把 802.11 数据包转换为带伪造 Ethernet 头的包再交给主机。因此,你可能能分析 IP、TCP、UDP 等上层协议,却看不到真实 802.11 链路层字段。

管理包和控制包

类型用途普通捕获中的情况
管理包由 WLAN 控制器维护无线网络多数驱动会丢弃,通常需要 monitor mode
低层控制包用于信道访问竞争和对等端包交换同步多数驱动会丢弃,通常需要 monitor mode

802.11 头与无线电头

头部类型能提供什么获取方式
伪造 Ethernet 头便于上层协议解析,但不含完整 802.11 字段普通 WLAN 捕获常见结果
802.11 头真实 802.11 链路层字段某些平台可选择链路层头类型;Linux 和 macOS 上通常只能在 monitor mode 中获得
802.11 + radio 头802.11 头加信号强度、数据速率等无线电信息依赖平台、适配器、驱动和捕获库支持

在 Wireshark GUI 中,可在捕获选项里选择链路层头类型;命令行中可用 -y 指定。常见形式包括:

text
-y IEEE802_11
-y IEEE802_11_RADIO
-y IEEE802_11_RADIO_AVS
-y PRISM

要查看某接口在 monitor mode 下可用的链路层头类型,原文给出以下命令形式,其中 interface 替换为实际接口名:

text
dumpcap -i interface -I -L
tshark -i interface -I -L
wireshark -i interface -I -L

省略 -I 可查看非 monitor mode 下可用的链路层头类型。

Monitor mode 与 Promiscuous mode 的边界

模式关闭了什么过滤能否替代另一个模式主要风险或限制
Promiscuous mode理论上关闭 MAC 地址过滤不能替代 monitor mode在 802.11 上常失败、只看到本机流量,受保护网络中其他主机流量可能无法解密
Monitor mode / rfmon mode关闭 SSID 过滤,并向主机提供当前 channel 上来自所有服务集的包是抓原始 802.11、管理帧、控制帧和无线电信息的常用方式可能让适配器从网络解除关联;只抓当前 channel;依赖硬件和驱动

如果 monitor mode 会使适配器从 SSID 解除关联,而主机没有其他网络适配器,那么抓包期间可能无法使用 DNS、无法把包保存到网络文件服务器等。

Channel、SSID 和 MAC 地址

Channel

802.11 使用无线电频率并划分为 channel。原文说明 2.4GHz 范围内有编号 1-14 的 channel,但不同国家/地区允许使用的 channel 不同。例如日本可用 #1-#14,欧洲可用 #1-#13,美国 FCC 允许 #1-#11。

channel 之间并不完全独立,1、6、11 是常见的不重叠组合。抓包时必须关注无线网卡当前调谐在哪个 channel。

SSID / ESSID

普通模式下,适配器通常只把与当前 SSID 相关的包交给主机。monitor mode 会禁用这个 SSID 过滤,因此可以捕获当前 channel 上所有 SSID 的包。

MAC 地址

普通模式下,适配器会把发给自身地址的 unicast、相关 multicast 或 broadcast 交给主机。Promiscuous mode 理论上关闭 MAC 地址过滤,但在 WLAN 上经常受限。

开启 monitor mode 的平台差异

通用方式

如果 Wireshark 使用 libpcap 1.0 或更高版本构建,并且平台与接口支持 monitor mode,Wireshark 捕获选项中可能出现“Monitor mode”复选框;dumpcap、TShark 和 Wireshark 命令行可用 -I

text
dumpcap -i interface -I
tshark -i interface -I
wireshark -i interface -I

如果复选框变灰,说明 libpcap 认为该适配器不支持 monitor mode。可能原因包括:接口不是 802.11 适配器、适配器不支持、驱动不支持,或 libpcap 判断有误。

BSD

原文说明,在 FreeBSD 5.2+、NetBSD 2.0+、OpenBSD 3.7+、DragonFly BSD 1.2+ 上,如果 Wireshark 使用并基于 libpcap 0.8.1 或更高版本构建,至少某些 802.11 适配器可以在 monitor mode 中捕获并看到原始 802.11 头。

常见命令形式如下,其中 interfacechannel_number 替换为实际值:

text
ifconfig interface monitor
ifconfig interface monitor channel channel_number
ifconfig interface -monitor

捕获完成后应关闭 monitor mode,使机器可以再次使用该 802.11 适配器进行常规网络操作。

DragonFly BSD 的旧版本支持情况在原文中带有不确定说明,不应外推。

Linux

Linux 上能否 monitor mode 捕获取决于网卡和驱动。较新的 Linux 内核支持 mac80211 框架,支持 cfg80211 和 monitor mode 的驱动通常能用标准方式控制 monitor mode。

为了看到 802.11 头,原文说明在 Linux 上必须在 monitor mode 中捕获。

常见路径是使用 aircrack-ng 的 airmon-ng

text
sudo airmon-ng start wlan0
sudo airmon-ng stop mon0

如果输出显示 monitor mode enabled on mon0,后续应在 mon0 上捕获,而不是在 wlan0 上捕获。对于不支持 mac80211 框架的驱动,可能仍在原接口上捕获,关闭 monitor mode 时也使用原接口。

也可以用 iw 创建 monitor 接口,原文给出思路是:先查看已有接口,选择一个 monN 名称,创建 monitor 接口,启用它,捕获完成后删除它。

text
ifconfig -a
iw dev interface interface add mon0 type monitor
ifconfig mon0 up
iw dev mon0 interface del

原文还特别提醒:新的 Linux Wi-Fi 架构允许多个虚拟接口共享一个物理接口。必须确保共享同一无线电的其他虚拟接口不会把无线电重新调谐到其他 channel 或发起扫描,否则会漏包。黄金规则是:无线电没有调谐到该 channel,就会漏掉该 channel 的内容。

使用 NdisWrapper 的适配器通常会受到类似 Windows 的限制,原文概括为通常没有 monitor mode,也没有 802.11 头。

macOS

原文按系统版本区分:

macOS / Mac OS X 版本原文说明
10.4.0 之前不支持 monitor mode,不支持捕获数据时查看 802.11 头,也不支持非数据帧;支持 promiscuous mode
10.4.x Tiger支持 monitor mode;只有 monitor mode 中才提供 802.11 头并捕获非数据帧
10.5.x Leopard支持 monitor mode;可通过选择非 Ethernet 链路层头类型进入相关捕获方式
10.6 Snow Leopard 及更高支持 monitor mode;Wireshark 1.4+ 可在捕获选项中勾选 Monitor mode
Mojave 或更高版本的某些新机器monitor mode 中可能无法继续保持 Wi-Fi 关联;需要先解除关联

原文给出解除关联的命令:

text
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z

还说明较新 macOS 由于 System Integrity Protection,不能随意在系统路径创建 airport 命令链接;可使用完整路径、PATH、用户可执行目录或 shell alias。

Windows

Windows 上取决于 Npcap 或 WinPcap,以及无线适配器和驱动。

捕获组件monitor mode802.11 头 / 非数据帧说明
Npcap支持部分无线网卡支持原始 802.11 捕获,结果依赖适配器安装时需选择支持 raw 802.11 traffic 和 monitor mode 的选项
WinPcap不支持不支持 monitor mode、802.11 头或非数据帧promiscuous mode 可设置,但经常受限
AirPcap支持完整原始 802.11 捕获包括 radiotap 信息Riverbed 已不再销售 AirPcap 适配器

Windows 上可用以下命令查看硬件能力,尤其关注 Network monitor mode 项:

text
netsh wlan show wirelesscapabilities

Npcap 可通过 Wireshark 或 Npcap 附带的 WlanHelper.exe 进入 monitor mode。原文还说明 Npcap 1.30 中 monitor mode 重新可用,但结果会因适配器不同而异。

WinPcap 下如果 WLAN 捕获有问题,原文建议尝试关闭 promiscuous mode;这种情况下必须在感兴趣的主机上捕获流量。

Channel hopping

在 monitor mode 中,可以固定在单个 channel 捕获,也可以在多个 channel 之间跳转。Channel hopping 会导致漏包,因为无线网卡任一时刻只能在一个 channel 上捕获。

用法适合场景风险
固定 channel排查某个 AP、station 或无线连接问题需要先知道目标 channel
Channel hopping初步识别可见范围内有哪些无线网络必然漏掉未停留时刻的流量

Wireshark 没有内置 channel hopping 功能。原文提到可用其他进程控制同一块无线网卡进行 hopping,也提到 Kismet 和自定义脚本作为选择。

Imported from https://wiki.wireshark.org/CaptureSetup/WLAN on 2020-08-11 23:12:06 UTC

相关 Wireshark Wiki 页面

网络分析技术档案