wpa_supplicant 的使用

wpa_supplicant是Linux下进行wifi连接的工具。还有另一个wifi连接的工具叫做wireless-tools,wireless-tools因为只能连接不适用WPA加密的wifi而逐渐退出使用。常用的wifi一版都使用WPA2或着WPA3加密方式。

本文将介绍如何使用wpa_supplicant进行wifi网络操作

wpa_supplicant是如何运行的

wpa_supplicant其实是一个后台服务,管理wifi的操作。但是命令行交互并不通过该程序进行操作。在进行wifi操作是是通过wpa_cli工具进行连接、断开、配置网络等操作。wpa_cli程序在运行时会与对应的wpa_supplicant服务进行交互,指示wpa_supplicant该如何操作。

当系统中有多个wifi网卡时需要使用多个wpa_supplicant后台进程进行管理,每个wpa_supplicant只管理一个wifi网卡。

启动后台服务

wpa_supplicant有几个常用参数:

  1. 指定配置文件 -c
  2. 指定后台执行 -B
  3. 指定管理的网络接口 -i

由于每个wpa_supplicant只管理一个wifi网卡,所以在启动时需要指定要管理的wifi网卡。

【注】:配置文件和网络接口必须指定,如果配置文件有允许自动连接的网络则会尝试连接

# 启动守护进程管理wlan0,
# 指定配置文件为wpa_supplicant.conf
# -B指定后台执行
wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf

【注】:还有一个参数-p用于指定进程间通信文件路径,如果不指定默认是/var/run/wpa_supplicant,如果wpa_supplicant指定了其它路径,则后续使用wpa_cli也要指定对应的路径。否则wpa_cli与wpa_supplicant无法通信。此处不指定,使用默认配置。

配置文件

wpa_supplicant.conf文件最简可以是空文件,但是必须存在。

一般包含如下内容。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

如果希望wpa_supplicant启动直接连接网络则可以直接在配置文件中写入wifi信息。例如下面这样

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
    ssid="<wifi名>"
    psk="<wifi密码>"
}

wpa_cli控制无线网卡

常用命令

命令 功能 举例
interface 交互模式下指定无线网卡 > interface wlan0
scan 扫描附近wifi
scan_result 打印扫描结果
add_network 添加一个新网络并返回网络ID
set_network 设置网络属性 set_network ssid ‘““‘ # 设置网络ssid
set_network psk ‘““‘ # 设置网络密码
set_network priority # 设置网络优先级
enable_network 使能网络 enable_network # 使能指定网络
select_network 选择连接已设置的网络 select_network
disconnect 断开网络连接
reconnect 重新连接到wifi
save_config 保存配置到配置文件
list_networks 列出当前保存的网络
terminate 终止wpa_supplicant服务

交互形式

可以直接运行wpa_cli

wpa_cli
> interface wlan0 # 选择wlan0网口,如果只有一个的话可以不输入,默认选择wlan0
> scan # 扫描附近wifi
> scan_result # 显示wifi扫描结果
> add_network # 添加一个新wifi,执行后会返回新网络的id,后续会用到
> set_network <network_id> ssid '"<SSID>"' # 设置新网络的wifi名称,注意此处双引号外要再包裹一层单引号
> set_network <network_id> psk '"<password>"' # 设置新网络的密码
> enable_network <network_id> # 启用网络,此时会自动连接
> save_config # 保存配置到配置文件
> quit # 退出交互

命令形式

命令形式只是在交互形式的基础上指定无线网卡,下面仅做举例说明

wpa_cli -iwlan0 scan
wpa_cli -iwlan0 scan_result   

参考文档

  1. wpa_cli 连接WiFi的步骤
  2. wpa_cli在set_network阶段一直报FAIL问题
0%