wpa_supplicant工具包含wpa_supplicant和wpa_cli这2个程序,其中wpa_supplicant程序作为服务端在后台运行,服务wpa_cli客户端的请求,从而实现WiFi的配置连接。wpa_supplicant工具支持wep、wpa、wpa2等加密认证方式。本文接下来介绍如何使用wpa_supplicant、wpa_cli这2个程序进行WiFi的配置。
一、wpa_supplicant的使用
运行wpa_supplicant,wpa_supplicant程序作为wpa_cli的服务端,必须先启动后,才能给wpa_cli访问使用。
wpa_supplicant的手册说明:
wpa_supplicant
usage:
wpa_supplicant [-BddhKLqqtvW] [-P<pid file>] [-g<global ctrl>] \
[-G<group>] \
-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
[-b<br_ifname>] [-e<entropy file>] \
[-o<override driver>] [-O<override ctrl>] \
[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
[-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]
drivers:
nl80211 = Linux nl80211/cfg80211
wext = Linux wireless extensions (generic)
wired = Wired Ethernet driver
options:
-b = optional bridge interface name
-B = run daemon in the background
-c = Configuration file
-C = ctrl_interface parameter (only used if -c is not)
-d = increase debugging verbosity (-dd even more)
-D = driver name (can be multiple drivers: nl80211,wext)
-e = entropy file
-g = global ctrl_interface
-G = global ctrl_interface group
-h = show this help text
-i = interface name
-I = additional configuration file
-K = include keys (passwords, etc.) in debug output
-L = show license (BSD)
-N = start describing new interface
-o = override driver parameter for new interfaces
-O = override ctrl_interface parameter for new interfaces
-p = driver parameters
-P = PID file
-q = decrease debugging verbosity (-qq even less)
-t = include timestamp in debug messages
-v = show version
-W = wait for a control interface monitor before starting
例:
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
-D nl80211:表示驱动类型名称为nl80211
-i wlan0:表示网络接口名称为wlan0
-c /etc/wpa_supplicant.conf:表示配置文件为wpa_supplicant.conf
-B:表示将守护进程wpa_supplicant 挂到后台运行
二、wpa_cli的使用
1、wpa_cli的使用方式
wpa_supplicant作为服务端已经运行,此时再启动wpa_cli客户端,即可通过wpa_cli客户端进行网络配置的操作。
使用wpa_cli有2种方式,一种是通过进入wpa_cli控制台交互界面进行。
例:
在串口终端输入:
wpa_cli
另一种是不进入控制台交互界面,直接通过串口终端输入完整的命令。本文的WiFi配置将通过这种方式进行介绍。
例:再串口终端输入命令:
wpa_cli -i wlan0 help
注意:
-i wlan0:表示网络接口名称是wlan0。我的板子WiFi的网络接口名称是wlan0,下文将一直使用这网络接口操作。
下面我们将从使用WiFi的常用流程来介绍wpa_cli的使用。所有的命令使用介绍可以通过“wpa_cli -i wlan0 help”命令进行查看。
2、扫描周边WiFi热点
启动扫描:
wpa_cli -i wlan0 scan
注意:
scan扫描过程需要一定的时间,扫描过程中将使wpa_supplicant处于busy状态,再次发送scan扫描将失败。
查看扫描结果:
wpa_cli -i wlan0 scan_results
注意:
scan_results打印出来的是可获得的wifi的列表,列表包含WiFi热点的ssid(名称)、bssid(mac地址)、signal level(信号强度,单位dBm)、flags(加密类型)等。
可以发现,如果周边有多个热点,打印出来的WiFi列表,一个热点是一行信息,但热点排列的先后顺序不是严格按信号强度signal level(负值)由大到小排列。而且此时再开新的WiFi热点,重新scan,然后scan_results打印结果,会发现新开的WiFi热点,虽然信号强,但也是排在列表很靠后的位置。
所以如果想让WiFi热点按照信号强度由大到小排序,就要在获取到WiFi列表后,自己再根据信号强度进行降序排列,从而实现信号强的WiFi排在前面。
3、连接WiFi热点
增加一个网络id:
add_network命令会返回一个network id,后面是根据这网络编号来配置WiFi热点。
wpa_cli -i wlan0 add_network
配置WiFi热点的名称ssid:
wpa_cli -i wlan0 set_network 网络编号 ssid '"WiFi名称"'
例:
wpa_cli -i wlan0 set_network 0 ssid '"honor"'
配置WiFi热点的密码psk:
wpa_cli -i wlan0 set_network 网络编号 psk '"密码"'
例:
wpa_cli -i wlan0 set_network 0 psk '"12345678"'
查看网络列表:
wpa_cli -i wlan0 list_network
选择网络:
使用list_network命令,会打印所有已添加成功的WiFi热点,如果有多个WiFi热点,可以使用select_network命令选择使用哪个热点,可实现WiFi热点的切换。
wpa_cli -i wlan0 select_network 网络编号
例:
wpa_cli -i wlan0 select_network 0
注意:
此时只是连接AP成功,并未获取到IP、DNS。可使用udhcpc命令动态获取IP。
例:
udhcpc -i wlan0 -q
下面示例如何连接WiFi进行上网。
配置热点信息:
选择热点:
查看是否分配IP:
使用udhcpc获取IP:
访问外网测试:
4、查看WiFi状态信息
wpa_cli -i wlan0 status
使用status命令,查看当前wifi的信息,包括bssid,ssid,IP等等。
注意:通过status命令查看到WiFi是连接状态,并不能确定就能访问外网,还要查看是否已经获取了IP、DNS等。
5、保存WiFi热点信息
wpa_cli -i wlan0 save_config
保存WiFi热点信息到配置文件/etc/wpa_supplicant.conf文件中。
6、停止使用WiFi热点
wpa_cli -i wlan0 disable_network 网络编号
此时还连接着WiFi热点,只是没有激活使用WiFi。
例:
wpa_cli -i wlan0 disable_network 0
7、使能WiFi热点
wpa_cli -i wlan0 enable_network 网络编号
根据网络编号使能对应的WiFi热点,
例:
wpa_cli -i wlan0 enable_network 0
8、断开WiFi热点
wpa_cli -i wlan0 disconnect
断开连接WiFi热点,
9、重连WiFi热点
disconnect断开WiFi后,可以使用reconnect重连原来断开的网络。
wpa_cli -i wlan0 reconnect
10、删除WiFi热点
删除热点后,热点将从list_network中移除,即不能删除前的网络编号配置WiFi热点。
wpa_cli -i wlan0 remove_network 网络编号
例:
wpa_cli -i wlan0 remove_network 0
来源:CSDN
作者:bulebin
链接:https://blog.csdn.net/bulebin/article/details/85253631