Linux Wireless之WIFI扫描

Linux Wireless之WIFI扫描
Linux Wireless之WIFI扫描 | DDNotesLinux Wireless之WIFI扫描Linux 下的 Wi-Fi 扫描流程横跨用户层、内核通用层与驱动层核心路径是 应用 → nl80211 → cfg80211 → mac80211/驱动 → 硬件。下面从最新的内核源码7.1.0-rc6来看看整个过程。 一、整体架构总览WiFi 扫描在 Linux 中分为以下几层从上到下依次为 ┌────────────────────────https://notes.z-dd.online/2026/06/04/Linux%20Wireless%E4%B9%8BWIFI%E6%89%AB%E6%8F%8F/Linux Wireless之WIFI扫描Linux 下的 Wi-Fi 扫描流程横跨用户层、内核通用层与驱动层核心路径是 应用 → nl80211 → cfg80211 → mac80211/驱动 → 硬件。下面从最新的内核源码7.1.0-rc6来看看整个过程。一、整体架构总览WiFi 扫描在 Linux 中分为以下几层从上到下依次为CODE┌─────────────────────────────────────────────────────────────────┐│ 用户空间 (Userspace) ││ wpa_supplicant / iw / NetworkManager ││ 通过 Netlink Socket 发送命令 │└───────────────────────────┬─────────────────────────────────────┘│ NL80211_CMD_TRIGGER_SCAN│ NL80211_CMD_GET_SCAN│ NL80211_CMD_START_SCHED_SCAN▼┌─────────────────────────────────────────────────────────────────┐│ nl80211 (Netlink 802.11 接口层) ││ net/wireless/nl80211.c ││ 解析用户空间命令 → 构造扫描请求 → 调用 cfg80211 │└───────────────────────────┬─────────────────────────────────────┘│▼┌─────────────────────────────────────────────────────────────────┐│ cfg80211 (无线配置子系统) ││ net/wireless/scan.c, core.c ││ 扫描请求管理 / BSS 数据库 / 扫描结果过期 / 6GHz 拆分扫描 │└───────────────────────────┬─────────────────────────────────────┘│ rdev-ops-scan()│ (或 mac80211: ieee80211_scan)▼┌─────────────────────────────────────────────────────────────────┐│ mac80211 (软 MAC 层) ││ net/mac80211/scan.c, cfg.c ││ 软件扫描状态机 / 硬件扫描调度 / 扫描结果收集 │└───────────────────────────┬─────────────────────────────────────┘│ drv_hw_scan() / drv_sw_scan_start()▼┌─────────────────────────────────────────────────────────────────┐│ 硬件驱动 (Hardware Driver) ││ iwlwifi / ath11k / mt76 / rtw89 / ... ││ 控制射频硬件发送 Probe Request / 接收 Beacon/Probe Response │└─────────────────────────────────────────────────────────────────┘二、核心数据结构2.1 扫描请求结构CODE┌──────────────────────────────────────────────────────────────┐│ struct cfg80211_scan_request ││ (include/net/cfg80211.h:2895) │├──────────────────────────────────────────────────────────────┤│ ssids[] / n_ssids -- 要扫描的 SSID 列表 ││ channels[] / n_channels -- 要扫描的信道列表 ││ ie / ie_len -- 附加的 IE 信息 ││ flags -- 扫描标志 (随机化等) ││ mac_addr / mac_addr_mask -- MAC 地址随机化 ││ bssid -- 指定 BSSID 扫描 ││ duration -- 信道驻留时间 ││ rates[NL80211_NUM_BANDS] -- 每个频段的速率掩码 ││ wdev / wiphy -- 关联的无线设备 ││ scan_6ghz -- 是否包含 6GHz 信道 ││ scan_6ghz_params[] -- 6GHz 扫描参数 ││ no_cck -- 不使用 CCK 速率 │└──────────────────────────────────────────────────────────────┘┌──────────────────────────────────────────────────────────────┐│ struct cfg80211_sched_scan_request ││ (include/net/cfg80211.h:3025) │├──────────────────────────────────────────────────────────────┤│ reqid -- 请求 ID ││ ssids[] / n_ssids -- 匹配的 SSID ││ channels[] / n_channels -- 扫描信道 ││ match_sets[] / n_match_sets-- RSSI 匹配集 ││ scan_plans[] / n_scan_plans-- 扫描计划 (间隔迭代次数) ││ flags -- 标志 ││ mac_addr / mac_addr_mask -- MAC 随机化 ││ min_rssi_thold -- 最小 RSSI 阈值 ││ delay -- 延迟报告 │└──────────────────────────────────────────────────────────────┘┌──────────────────────────────────────────────────────────────┐│ struct cfg80211_bss ││ (include/net/cfg80211.h:3174) │├──────────────────────────────────────────────────────────────┤│ bssid[ETH_ALEN] -- BSS 标识 ││ channel -- 信道 ││ ies / beacon_ies / proberesp_ies -- IE 数据 ││ signal -- 信号强度 (mBm) ││ beacon_interval -- Beacon 间隔 ││ capability -- 能力字段 ││ ts_boottime -- 引导时间戳 ││ hidden_beacon_bss -- 隐藏 SSID 关联 ││ transmitted_bss -- MBSSID 传输 BSS ││ nontrans_list -- 非传输 BSS 列表 │└──────────────────────────────────────────────────────────────┘2.2 cfg80211 内部扫描状态CODE┌──────────────────────────────────────────────────────────────┐│ struct cfg80211_registered_device (net/wireless/core.h) │├──────────────────────────────────────────────────────────────┤│ scan_req -- 当前活跃的扫描请求 ││ int_scan_req -- 内部拆分扫描请求 (6GHz) ││ scan_msg -- 延迟的扫描完成消息 ││ scan_done_wk -- 扫描完成工作队列项 ││ sched_scan_req_list -- 活跃的定时扫描请求链表 ││ sched_scan_res_wk -- 定时扫描结果工作队列项 │└──────────────────────────────────────────────────────────────┘三、完整扫描流程3.1 普通扫描 (Trigger Scan) 完整流程作者: Shell链接: https://notes.z-dd.online/2026/06/04/Linux%20Wireless%E4%B9%8BWIFI%E6%89%AB%E6%8F%8F/来源: DDNotes著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。。。。 。。。更多请关注我的博客https://notes.z-dd.online/或我的