Appearance
Appearance
本页用于判断在 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 |
容易混淆的点:
| 你想看到什么 | 通常需要的模式 | 可能看到的链路层头 | 主要限制 |
|---|---|---|---|
| 本机收发的普通 IP/TCP/UDP 流量 | 普通无线接口捕获 | 伪造 Ethernet 头 | 看不到完整 802.11 头、管理帧、控制帧和无线电信息 |
| 当前 SSID 内更多数据帧 | Promiscuous mode 可能有帮助 | 可能仍是伪造 Ethernet 头 | 802.11 上经常不起作用或效果有限 |
| 管理帧、控制帧、其他 BSS/SSID 流量 | Monitor mode | 802.11 头或 802.11 + radio 头 | 依赖平台和硬件;可能导致无线接口断开关联 |
| 信号强度、数据速率等无线电层信息 | Monitor mode 或平台支持的 radio 头 | Radiotap、AVS、Prism、BSD radio 等 | 并非所有平台和适配器都提供 |
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 |
| 头部类型 | 能提供什么 | 获取方式 |
|---|---|---|
| 伪造 Ethernet 头 | 便于上层协议解析,但不含完整 802.11 字段 | 普通 WLAN 捕获常见结果 |
| 802.11 头 | 真实 802.11 链路层字段 | 某些平台可选择链路层头类型;Linux 和 macOS 上通常只能在 monitor mode 中获得 |
| 802.11 + radio 头 | 802.11 头加信号强度、数据速率等无线电信息 | 依赖平台、适配器、驱动和捕获库支持 |
在 Wireshark GUI 中,可在捕获选项里选择链路层头类型;命令行中可用 -y 指定。常见形式包括:
-y IEEE802_11
-y IEEE802_11_RADIO
-y IEEE802_11_RADIO_AVS
-y PRISM要查看某接口在 monitor mode 下可用的链路层头类型,原文给出以下命令形式,其中 interface 替换为实际接口名:
dumpcap -i interface -I -L
tshark -i interface -I -L
wireshark -i interface -I -L省略 -I 可查看非 monitor mode 下可用的链路层头类型。
| 模式 | 关闭了什么过滤 | 能否替代另一个模式 | 主要风险或限制 |
|---|---|---|---|
| Promiscuous mode | 理论上关闭 MAC 地址过滤 | 不能替代 monitor mode | 在 802.11 上常失败、只看到本机流量,受保护网络中其他主机流量可能无法解密 |
| Monitor mode / rfmon mode | 关闭 SSID 过滤,并向主机提供当前 channel 上来自所有服务集的包 | 是抓原始 802.11、管理帧、控制帧和无线电信息的常用方式 | 可能让适配器从网络解除关联;只抓当前 channel;依赖硬件和驱动 |
如果 monitor mode 会使适配器从 SSID 解除关联,而主机没有其他网络适配器,那么抓包期间可能无法使用 DNS、无法把包保存到网络文件服务器等。
802.11 使用无线电频率并划分为 channel。原文说明 2.4GHz 范围内有编号 1-14 的 channel,但不同国家/地区允许使用的 channel 不同。例如日本可用 #1-#14,欧洲可用 #1-#13,美国 FCC 允许 #1-#11。
channel 之间并不完全独立,1、6、11 是常见的不重叠组合。抓包时必须关注无线网卡当前调谐在哪个 channel。
普通模式下,适配器通常只把与当前 SSID 相关的包交给主机。monitor mode 会禁用这个 SSID 过滤,因此可以捕获当前 channel 上所有 SSID 的包。
普通模式下,适配器会把发给自身地址的 unicast、相关 multicast 或 broadcast 交给主机。Promiscuous mode 理论上关闭 MAC 地址过滤,但在 WLAN 上经常受限。
如果 Wireshark 使用 libpcap 1.0 或更高版本构建,并且平台与接口支持 monitor mode,Wireshark 捕获选项中可能出现“Monitor mode”复选框;dumpcap、TShark 和 Wireshark 命令行可用 -I。
dumpcap -i interface -I
tshark -i interface -I
wireshark -i interface -I如果复选框变灰,说明 libpcap 认为该适配器不支持 monitor mode。可能原因包括:接口不是 802.11 适配器、适配器不支持、驱动不支持,或 libpcap 判断有误。
原文说明,在 FreeBSD 5.2+、NetBSD 2.0+、OpenBSD 3.7+、DragonFly BSD 1.2+ 上,如果 Wireshark 使用并基于 libpcap 0.8.1 或更高版本构建,至少某些 802.11 适配器可以在 monitor mode 中捕获并看到原始 802.11 头。
常见命令形式如下,其中 interface 和 channel_number 替换为实际值:
ifconfig interface monitor
ifconfig interface monitor channel channel_number
ifconfig interface -monitor捕获完成后应关闭 monitor mode,使机器可以再次使用该 802.11 适配器进行常规网络操作。
DragonFly BSD 的旧版本支持情况在原文中带有不确定说明,不应外推。
Linux 上能否 monitor mode 捕获取决于网卡和驱动。较新的 Linux 内核支持 mac80211 框架,支持 cfg80211 和 monitor mode 的驱动通常能用标准方式控制 monitor mode。
为了看到 802.11 头,原文说明在 Linux 上必须在 monitor mode 中捕获。
常见路径是使用 aircrack-ng 的 airmon-ng:
sudo airmon-ng start wlan0
sudo airmon-ng stop mon0如果输出显示 monitor mode enabled on mon0,后续应在 mon0 上捕获,而不是在 wlan0 上捕获。对于不支持 mac80211 框架的驱动,可能仍在原接口上捕获,关闭 monitor mode 时也使用原接口。
也可以用 iw 创建 monitor 接口,原文给出思路是:先查看已有接口,选择一个 monN 名称,创建 monitor 接口,启用它,捕获完成后删除它。
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 / 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 关联;需要先解除关联 |
原文给出解除关联的命令:
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z还说明较新 macOS 由于 System Integrity Protection,不能随意在系统路径创建 airport 命令链接;可使用完整路径、PATH、用户可执行目录或 shell alias。
Windows 上取决于 Npcap 或 WinPcap,以及无线适配器和驱动。
| 捕获组件 | monitor mode | 802.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 项:
netsh wlan show wirelesscapabilitiesNpcap 可通过 Wireshark 或 Npcap 附带的 WlanHelper.exe 进入 monitor mode。原文还说明 Npcap 1.30 中 monitor mode 重新可用,但结果会因适配器不同而异。
WinPcap 下如果 WLAN 捕获有问题,原文建议尝试关闭 promiscuous mode;这种情况下必须在感兴趣的主机上捕获流量。
在 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