简介
wpa_supplicant是一个连接、配置WiFi的工具,它主要包含wpa_supplicant与wpa_cli两个程序
。 可以通过wpa_cli来进行WiFi的配置与连接,前提要保证wpa_supplicant正常启动
。
相当于wpa_supplicant 是服务端,wpa_cli 是客户端。
安装
wpa_supplicant 依赖于 openssl , libnl , 需要提前进行安装。安装方法ARM-Linux平台下,在上篇文章已经介绍。
1. 启动wpa_supplicant应用
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B -d
-D 驱动程序名称(可以是多个驱动程序:nl80211,wext)
-i 网络接口名称
-c 配置文件
-B 在后台运行守护进程
-d:增加调试信息
配置文件 /etc/wpa_supplicant.conf文件里
,添加下面代码:
常规连接已知WIFI填写
ctrl_interface=/var/run/wpa_supplicant #必须配置
update_config=1 #强制更新覆盖配置
ap_scan=1 #AP扫描(默认为0),=1是工作在nl80211的优化工作。为了寻找隐藏了的网络
network={
ssid="userxxx" #接入点名称
psk="passwdxxx" #接入点密码
priority=0 #优先级组,(默认为0)优先级数值越大,就越早在扫描结果中得到匹配,如果优先级组相同,则将会根据安全规则、信号强度等来作为选择的依据。
}
加密模式下填写
ctrl_interface=/var/run/wpa_supplicant #必须配置
update_config=1 #强制更新覆盖配置
network={
ssid="xxxx" #接入点名称
scan_ssid=1 #无线接入点是隐藏可搜索连接
#psk 是加密后的密码,用wpa_passphrase自动生成或连接已知WIFI的密码
psk=xxxxxxxxx37bca5cf24a345f514d319211822f568bba28f8f0b74c894e7644
proto=RSN #支持的协议列表
key_mgmt=WPA-PSK #认证密钥管理协议
pairwise=CCMP #加密方式
auth_alg=OPEN #表示需开放系统身份验证
}
附注自动生成模式:
$ wpa_passphrase ESID passwd >>/etc/wpa_supplicant/wpa_supplicant.conf
or
wpa_passphrase wifiname passwd123 | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
network={undefined
ssid="ESID"
#psk="passwd"
psk=7e0c3a4dcd727cea7b4fa10f489f0b165e50240823cc0b9d570916bdb63a71af
}
(1)ctrl_interface指向的是一个目录,在这个目录中默认会生成一个文件/var/run/wpa_supplicant/wlan0,这是local socket address,相当于UNIX Domain Socket,程序和后台程序wpa_supplicant进行通信(其实是wpa_supplicant作为后台服务程序是通过本地socket和客户端进行通信的)
(2)update_config = 1时会在(客户端发送SAVE_CONFIG命令)更新这个配置文件。
(3)具体配置参数详细解释查询地址:
https://www.freebsd.org/cgi/man.cgi?wpa_supplicant.conf(5)
2.启动wpa_cli应用
wpa_cli 有命令和交互的方式进行操作
wpa_cli -i wlan0 scan //搜索附件wifi热点
wpa_cli -i wlan0 scan_result //显示搜索wifi热点
wpa_cli -i wlan0 status //当前WPA/EAPOL/EAP通讯状态
wpa_cli -i wlan0 ping //pings wpa_supplicant
添加新的连接
wpa_cli -i wlan0 add_network //添加一个网络连接,会返回<network id>
wpa_cli set_network <network id> ssid '"name"' //ssid名称
wpa_cli set_network <network id> psk '“psk”' //密码
wpa_cli set_network <network id> scan_ssid 1
wpa_cli set_network <network id> priority 1 //优先级
保存连接
wpa_cli -i wlan0 save_config //信息保存到默认的配置文件中,前面提到的/etc/wpa_supplicant.conf
断开连接
wpa_cli -i wlan0 disable_network <network id>
连接已有连接
wpa_cli -i wlan0 list_network //列举保存过得连接
wpa_cli -i wlan0 select_network <network id> //连接指定的ssid
wpa_cli -i wlan0 enable_network <network id> //使能制定的ssid
网络连接成功的配置文件示例
ctrl_interface=/var/run/wpa_supplicant/
ap_scan=1
network={
scan_ssid=1
ssid="xxxx"
psk="xxxx"
bssid=
priority=2
}
wpa_cli无法运行的原因Could not connect to wpa_supplicant
必须在wpa_supplicant.conf 中的ctrl_interface添加/var/run/或者/run路径
在去启动服务。
配置wpa_supplicant.conf
update_config=1
ctrl_interface=/var/run/wpa_supplicant
启动服务
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B