参考Linux WPA/WPA2/WPA3/IEEE 802.1X Supplicant-CSDN博客Linux WIFI 驱动实验-CSDN博客Linux下的wifi开发_linux wifi-CSDN博客基础状态查询如下# 查看WiFi网卡状态wlan0为网卡名按需替换 wpa_cli -i wlan0 status # 扫描周边WiFi wpa_cli -i wlan0 scan # 查看扫描结果SSID、信号强度、加密方式 wpa_cli -i wlan0 scan_results # 查看已配置的网络列表显示网络ID、SSID、是否启用 wpa_cli -i wlan0 list_networks更多待补充连接网络使用wpa_cli指令来连接某个网络要怎么做1. 使用wpa_cli连接 WiFi 网络的完整步骤wpa_cli是用于控制wpa_supplicantWiFi 认证服务的命令行工具适用于 Linux 系统嵌入式 / 桌面端以下是通用且可直接执行的连接流程前置条件确保wpa_supplicant已运行后台服务且 WiFi 网卡已启用如wlan0知道 WiFi 的SSID网络名称和密码WPA/WPA2 加密以root权限执行嵌入式系统默认 root桌面端需加sudo。步骤 1进入 wpa_cli 交互模式推荐# 进入交互模式指定WiFi网卡通常是wlan0 wpa_cli -i wlan0进入后会看到提示符后续命令在交互模式内执行。步骤 2添加 WiFi 网络配置# 添加新的网络配置会返回网络ID如0 add_network # 设置WiFi名称SSID替换为你的网络名注意引号 set_network 0 ssid 你的WiFi名称 # 设置WiFi密码替换为你的密码注意引号 set_network 0 psk 你的WiFi密码 # 可选强制使用WPA2加密兼容多数网络 set_network 0 proto WPA2 set_network 0 key_mgmt WPA-PSK # 启用该网络配置 enable_network 0 # 保存配置到wpa_supplicant.conf避免重启后失效 save_config # 退出交互模式 quit步骤 3获取 IP 地址DHCP# 释放旧IP可选 dhclient -r wlan0 # 获取新IP核心步骤 dhclient wlan0 # 或嵌入式系统常用udhcpc -i wlan0步骤 4验证连接状态# 查看WiFi连接状态 wpa_cli -i wlan0 status # 测试网络连通性 ping 8.8.8.82. 非交互模式一键执行适合脚本如果不想进入交互模式可直接用单行命令批量执行# 替换SSID和密码一键配置并连接 wpa_cli -i wlan0 add_network /tmp/network_id \ wpa_cli -i wlan0 set_network $(cat /tmp/network_id) ssid \你的WiFi名称\ \ wpa_cli -i wlan0 set_network $(cat /tmp/network_id) psk \你的WiFi密码\ \ wpa_cli -i wlan0 enable_network $(cat /tmp/network_id) \ wpa_cli -i wlan0 save_config \ dhclient wlan03. 常见问题与解决提示Failed to connect to wpa_supplicant原因wpa_supplicant未运行或网卡名错误解决启动服务wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf。连接后无 IP 地址原因DHCP 未获取到 IP解决重启 DHCP 客户端systemctl restart dhcpcd桌面端或udhcpc -i wlan0嵌入式。密码正确但认证失败原因加密方式不匹配如网络是 WPA配置了 WPA2解决删除加密强制配置让系统自动适配wpa_cli -i wlan0 set_network 0 proto WPA WPA2 wpa_cli -i wlan0 enable_network 0总结核心流程进入wpa_cli交互模式 → 添加网络 → 设置SSID/密码 → 启用网络 → 保存配置 → 获取DHCP IP交互模式适合手动操作非交互模式适合脚本批量执行连接后通过wpa_cli status验证状态ping测试网络连通性。wpa_cli指令里的0是啥意思在wpa_cli指令中你看到的数字0是WiFi 网络配置的唯一标识 IDNetwork ID可以把它理解为「WiFi 配置项的编号」核心作用是让wpa_supplicant知道你要操作哪一个 WiFi 配置因为系统中可以配置多个 WiFi。一、为什么会出现「0」当你用wpa_cli add_network添加新 WiFi 配置时wpa_supplicant会自动为这个新配置分配一个从 0 开始递增的数字 ID第一个配置是 0第二个是 1第三个是 2以此类推。后续所有针对这个 WiFi 的操作设置 SSID / 密码、启用 / 禁用、删除都需要通过这个 ID 指定操作对象。二、「0」的具体使用场景核心示例指令「0」的含义完整说明set_network 0 ssid MyWiFi操作 ID 为 0 的 WiFi 配置给编号 0 的 WiFi 配置项设置 SSIDWiFi 名称set_network 0 psk 123456操作 ID 为 0 的 WiFi 配置给编号 0 的 WiFi 配置项设置密码enable_network 0启用 ID 为 0 的 WiFi 配置让系统尝试连接编号 0 的 WiFidisable_network 0禁用 ID 为 0 的 WiFi 配置断开编号 0 的 WiFi 连接且不再自动连接remove_network 0删除 ID 为 0 的 WiFi 配置彻底删除编号 0 的 WiFi 配置项需 save_config 生效三、如何确认「0」对应的是哪个 WiFi如果不确定 ID 对应的 WiFi比如配置了多个可以用以下指令查看所有配置的 ID 和对应 SSID# 列出所有已配置的WiFi重点看第一列的ID、第二列的SSID wpa_cli -i wlan0 list_networks输出示例network id / ssid / bssid / flags 0 MyHomeWiFi any [ENABLED] 1 OfficeWiFi any [DISABLED] 2 PublicWiFi any [DISABLED]从输出能清晰看到ID0 对应「MyHomeWiFi」已启用ID1 对应「OfficeWiFi」已禁用此时操作enable_network 1就会切换到「OfficeWiFi」。四、关键注意事项ID 是临时 永久的添加配置时分配的 ID只要不删除配置重启wpa_supplicant后仍保持不变不一定必须是 00 只是「第一个添加的 WiFi」的默认 ID如果你添加第二个 WiFiID 会是 1操作时需用 1 替代 0无 ID 操作会报错比如直接执行set_network ssid MyWiFi少了 ID会提示「ERROR: invalid command arguments」因为系统不知道要操作哪个 WiFi。总结wpa_cli中的「0」是WiFi 配置项的 ID是操作特定 WiFi 的 “唯一标识”ID 由add_network自动分配从 0 开始递增可通过list_networks查看所有 ID 和对应 WiFi所有针对具体 WiFi 的操作设密码、启用 / 禁用、删除都必须指定这个 ID否则系统无法定位操作对象。每次添加一个wifi都要手动指定编号吗可以每次都用0吗核心结论不需要手动指定编号也不建议每次都强行用 0—— 编号Network ID是wpa_supplicant自动分配的强行复用 0 会导致旧配置被覆盖 / 冲突正确做法是用add_network获取自动分配的 ID再基于该 ID 操作。一、为什么不用手动指定编号add_network指令的核心作用就是自动生成唯一的 Network ID流程如下# 1. 执行add_network系统返回一个未被使用的ID首次是0第二次是1依此类推 wpa_cli -i wlan0 add_network # 输出示例0 首次添加/ 1第二次添加/ 2第三次... # 2. 直接用返回的ID配置WiFi无需手动想编号 wpa_cli -i wlan0 set_network 0 ssid WiFi1 # 首次自动分配0 wpa_cli -i wlan0 set_network 1 ssid WiFi2 # 第二次自动分配1手动指定编号完全没必要系统会保证 ID 的唯一性避免冲突。二、可以每次都用 0 吗不推荐1. 强行用 0 的两种场景及问题场景 1未删除旧的 0 号配置时复用 0若 0 号已配置过 WiFi1直接执行set_network 0 ssid WiFi2会覆盖 0 号的原有配置WiFi1 的配置被清空替换为 WiFi2相当于 “修改旧配置” 而非 “添加新配置”最终系统里只有 WiFi2WiFi1 的配置会丢失。场景 2先删除 0 号再复用 0虽然可以通过remove_network 0删除旧配置再重新add_network此时会重新分配 0但属于 “多此一举”且容易误操作比如忘记删除就复用导致配置覆盖。2. 强行用 0 的实操示例反面教材# 1. 首次添加WiFi1自动分配0 wpa_cli -i wlan0 add_network # 输出0 wpa_cli -i wlan0 set_network 0 ssid WiFi1 wpa_cli -i wlan0 enable_network 0 # 2. 想添加WiFi2强行用0未删除旧配置 wpa_cli -i wlan0 set_network 0 ssid WiFi2 # 覆盖WiFi1的配置 wpa_cli -i wlan0 enable_network 0 # 3. 查看配置列表只有WiFi2WiFi1已被覆盖 wpa_cli -i wlan0 list_networks # 输出0 WiFi2 any [ENABLED]三、正确的 “添加多个 WiFi” 姿势推荐无需关注 ID 数字让系统自动分配通过list_networks确认 ID 即可# 步骤1添加第一个WiFi自动分配ID0 NET_ID1$(wpa_cli -i wlan0 add_network) # 捕获自动分配的ID wpa_cli -i wlan0 set_network $NET_ID1 ssid WiFi1 wpa_cli -i wlan0 set_network $NET_ID1 psk Pass123 wpa_cli -i wlan0 enable_network $NET_ID1 # 步骤2添加第二个WiFi自动分配ID1 NET_ID2$(wpa_cli -i wlan0 add_network) wpa_cli -i wlan0 set_network $NET_ID2 ssid WiFi2 wpa_cli -i wlan0 set_network $NET_ID2 psk Pass456 wpa_cli -i wlan0 enable_network $NET_ID2 # 步骤3查看所有配置确认ID和SSID对应关系 wpa_cli -i wlan0 list_networks # 输出 # 0 WiFi1 any [ENABLED] # 1 WiFi2 any [ENABLED] # 步骤4保存配置永久生效 wpa_cli -i wlan0 save_config这种方式完全无需手动指定 ID既避免冲突又能保留多个 WiFi 配置系统会按priority优先级自动连接。四、特殊场景只想保留一个 WiFi复用 0如果你的需求是 “始终只保留一个 WiFi 配置新配置替换旧的”可以这样操作仅推荐单 WiFi 场景# 1. 先删除旧的0号配置若存在 wpa_cli -i wlan0 remove_network 0 2/dev/null # 忽略“无0号”的错误 # 2. 添加新配置自动分配0 NET_ID$(wpa_cli -i wlan0 add_network) wpa_cli -i wlan0 set_network $NET_ID ssid NewWiFi wpa_cli -i wlan0 set_network $NET_ID psk NewPass wpa_cli -i wlan0 enable_network $NET_ID wpa_cli -i wlan0 save_config总结无需手动指定编号add_network会自动分配唯一 ID用变量捕获即可如NET_ID$(wpa_cli add_network)不建议强行用 0复用 0 会覆盖旧配置导致多 WiFi 配置丢失仅适合 “单 WiFi 替换” 场景最佳实践添加多个 WiFi 时让系统自动分配 ID通过list_networks查看 ID按 ID 管理不同 WiFi。网络管理修改 / 删除 / 切换如下# 禁用指定网络ID为0从list_networks获取 wpa_cli -i wlan0 disable_network 0 # 启用指定网络切换WiFi wpa_cli -i wlan0 enable_network 0 # 修改已有网络的密码 wpa_cli -i wlan0 set_network 0 psk \NewPass456\ wpa_cli -i wlan0 enable_network 0 # 重新启用生效 wpa_cli -i wlan0 save_config # 删除指定网络 wpa_cli -i wlan0 remove_network 0 wpa_cli -i wlan0 save_config # 断开当前WiFi连接 wpa_cli -i wlan0 disconnect # 重新连接已配置的网络 wpa_cli -i wlan0 reconnect更多待补充wpa_supplicant配置文件wpa_supplicant 配置文件详解核心/etc/wpa_supplicant.conf配置文件是wpa_supplicant的核心所有 WiFi 配置永久存储于此格式为纯文本键值对 块结构以下是完整示例和关键说明1. 配置文件基础结构/etc/wpa_supplicant.conf# 全局配置通用设置 ctrl_interface/var/run/wpa_supplicant # wpa_cli通信的套接字目录 update_config1 # 允许wpa_cli save_config修改文件 countryCN # 国家码合规使用WiFi频段 ap_scan1 # 主动扫描WiFi # 网络配置块可配置多个对应不同WiFi network{ ssidMyWiFi # WiFi名称必须双引号 psk89abcdef1234567890abcdef12345678 # 加密后的PSK推荐 # 或明文密码测试用不推荐pskMyWiFiPass123 key_mgmtWPA-PSK # 加密方式WPA/WPA2 protoWPA2 # 协议版本WPA/WPA2/WPA3 pairwiseCCMP # 加密算法CCMP/AES groupCCMP # 组加密算法 priority10 # 连接优先级数值越高越优先 } # 开放网络配置示例无密码 network{ ssidPublicWiFi key_mgmtNONE priority5 } # 隐藏SSID的WiFi配置 network{ ssidHiddenWiFi pskHiddenPass123 scan_ssid1 # 强制扫描隐藏SSID priority8 }2. 配置文件关键参数说明参数作用ctrl_interfacewpa_cli 与 wpa_supplicant 通信的目录默认 /var/run/wpa_supplicantupdate_config设为 1 时wpa_cli save_config 会自动修改此配置文件ssidWiFi 名称必须用双引号包裹psk密码可填明文测试或加密 PSK生产由 wpa_passphrase 生成key_mgmt认证方式WPA-PSK普通 WiFi、NONE开放网络、WPA-EAP企业 WiFiproto协议版本WPA旧版、WPA2主流、WPA3新版、WPA WPA2兼容scan_ssid设为 1 时扫描隐藏 SSID 的 WiFi默认 0不扫描priority连接优先级数值越大越优先避免自动连低优先级 WiFi3. 配置文件的生成与修改手动编写直接编辑/etc/wpa_supplicant.conf按上述格式添加 network 块自动生成通过wpa_cli save_config自动写入推荐避免格式错误加密 PSK 生成wpa_passphrase MyWiFi MyPass123输出的内容可直接复制到 network 块中示例wpa_passphrase MyWiFi MyPass123 # 输出 network{ ssidMyWiFi #pskMyPass123 psk89abcdef1234567890abcdef12345678 # 加密后的密码 }三、常见配置文件路径不同系统差异系统 / 场景配置文件路径说明通用 LinuxDebian/Ubuntu/etc/wpa_supplicant.conf默认路径嵌入式 LinuxBuildroot/OpenWrt/etc/wpa_supplicant/wpa_supplicant.conf分目录存放systemd 系统/etc/wpa_supplicant/wpa_supplicant-wlan0.conf按网卡区分配置文件自定义启动任意路径启动时通过 - c 参数指定如-c /tmp/my_wpa.conf总结核心操作wpa_cli负责交互配置 / 连接wpa_passphrase生成加密 PSKwpa_supplicant负责后台运行配置文件核心是/etc/wpa_supplicant.conf包含全局配置 多个 network 块update_config1是允许自动修改的关键最佳实践生产环境用加密 PSK避免明文密码配置priority避免自动连错 WiFi修改后执行save_config永久生效。