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有几个常用参数:
- 指定配置文件 -c
- 指定后台执行 -B
- 指定管理的网络接口 -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 set_network set_network |
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