• 简介

wpa_cli 是一个基于文本的前端程序,用于与 wpa_supplicant 交互。

它用于查询当前状态、更改配置、触发事件和请求交互式用户输入。

wpa_cli 可以显示当前的认证状态、选择的安全模式、dot11 和 dot1x MIB 等。

此外,它可以配置一些变量,如 EAPOL 状态机参数和触发事件,如重新关联和 IEEE 802.1X 注销/登录。

wpa_cli 提供了一个用户界面来请求身份验证信息,例如用户名和密码,如果这些未包含在配置中。这可用于实现例如一次性密码或通用令牌卡身份验证,其中身份验证基于使用外部设备生成响应的质询-响应。

wpa_supplicant的控制接口可以配置为允许非root用户访问(ctrl_interface GROUP=配置文件中的参数)。这使得使用普通用户帐户运行 wpa_cli 成为可能。

wpa_cli 支持两种模式:交互模式和命令行模式。两种模式共享相同的命令集,主要区别在于交互模式提供对未经请求的消息(事件消息、用户名/密码请求)的访问。

交互模式在执行 wpa_cli 时启动,而不包括命令作为命令行参数。然后在 wpa_cli 提示符下输入命令。在命令行模式下,输入相同的命令作为 wpa_cli 的命令行参数。

  • 语法格式

wpa_cli [ -p path to ctrl sockets ] [ -i ifname ] [ -hvB ] [ -a action file ] [ -P pid file ] [ command ... ]
  • 可选参数

-p path
#Change the path where control sockets should be found.
-i ifname
#Specify the interface that is being configured. By default, choose the first interface found with a control socket in the socket path.
-h
#Help. Show a usage message.
-v
#Show version information.
-B
#Run as a daemon in the background.
-a file
#Run in daemon mode executing the action file based on events from wpa_supplicant. The specified file will be executed with the first argument set to interface name and second to "CONNECTED" or "DISCONNECTED" depending on the event. This can be used to execute networking tools required to configure the interface.
#Additionally, three environmental variables are available to the file: WPA_CTRL_DIR, WPA_ID, and WPA_ID_STR. WPA_CTRL_DIR contains the absolute path to the ctrl_interface socket. WPA_ID contains the unique network_id identifier assigned to the active network, and WPA_ID_STR contains the content of the id_str option.

-P file
#Set the location of the PID file.
  • 交互式身份验证参数请求

当 wpa_supplicant 需要配置文件中不存在的身份验证参数(如用户名和密码)时,它会向所有附加的前端程序发送请求消息,例如交互模式下的 wpa_cli。

wpa_cli 使用以下命令显示这些请求。

CTRL-REQ-<type>-<id>:<text>

<type> 是 IDENTITY、PASSWORD 或 OTP(一次性密码)

<id> 是当前网络的唯一标识符。 <text> 是请求的描述。在 OTP 请求的情况下,它包括来自身份验证服务器的质询。 可以使用身份、密码和 otp 命令来回复这些请求。

<id> 需要从匹配请求中复制。无论请求是针对 PASSWORD 还是 OTP,都可以使用 password 和 otp 命令。

这两个命令之间的主要区别在于,只要 wpa_supplicant 正在运行,就会记住使用密码给出的值,而使用 otp 给出的值只使用一次然后被遗忘,即 wpa_supplicant 每次使用都会向前端询问一个新值。

这可用于实现一次性密码列表和基于通用令牌卡的身份验证

示例

#Example request for password and a matching reply:

CTRL-REQ-PASSWORD-1:Password needed for SSID foobar
> password 1 mysecretpassword
#Example request for generic token card challenge-response:

CTRL-REQ-OTP-2:Challenge 1235663 needed for SSID foobar
> otp 2 9876

  • 综合应用示例

#启动脚本
wpa_supplicant -iwlan0 -Dnl80211 -c/etc/ambaipcam/IPC_Q313/config/wlan/wpa_supplicant.conf -B
#查询网卡状态
wpa_cli -p/var/run/wpa_supplicant -iwlan0 status
#搜索附近网络功能  no/ok
wpa_cli -i wlan0 scan
#搜索附近网络,并列出结果
wpa_cli -i wlan0 scan_result
#查看当前连接的是哪个网络
wpa_cli -i wlan0 list_network    
#获取一个存储wifi结构的id,假设为1
wpa_cli -i wlan0 add_network
#设置ID为1的热点SSID
wpa_cli -i wlan0 set_network 1 ssid '"HO4428"'  
#设置ID为1的热点的密码
wpa_cli -i wlan0 set_network 1 psk '"442701102"'
#设置加密方式,可以不加
wpa_cli -i wlan0 set_network 1 key_mgmt WPA2-PSK-CCMP
#设置当前网络优先级,默认为2,可以不加
wpa_cli -i wlan0 set_network 1 priority 2   
#设置ssid默认为1即可  ,可以不加
wpa_cli -i wlan0 set_network 1 scan_ssid 1    
#启动连接ID为1的网络
wpa_cli -i wlan0 enable_network 1
#选择网络0(这样做的好处在于,可以取消先前的其它网络连接)
wpa_cli -i wlan0 select_network 1
#保存刚刚填写的wifi帐号,写入配置文件
wpa_cli -i wlan0 save_config
#请求自动分配IP地址,-b:后台(back) –i:指定接口 –q:获得续约后退出,如果想尽在前台运行,则去掉-b,加上-f
#不用不加,会自动分配
udhcpc -b -i wlan0 -q 

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐