使用wpa_supplicant和wpa_cli 扫描wifi热点及配网
一:简要说明
交叉编译wpa_supplicant工具后会有wpa_supplicant和wpa_cli两个程序生产,如果知道需要连接的wifi热点及密码的话不需要遍历及查询所有wifi热点的名字及信号强度等信息的话,使用wpa_supplicant即可,否则还需要使用wpa_cli来查询遍历wifi热点及配网。
wpa_cli不能单独使用,需要先启动wpa_supplicant后在运行wpa_cli,因为wpa_supplicant作为服务端,wpa_cli作为客户端需要访问wpa_supplicant
二:加载无线网卡驱动
WiFi的扫描及配网本质是网卡驱动实现的,所以必须先加载网卡驱动
insmod cfg80211.ko
insmod rtl8733bu.ko
mkdir /tmp/wpa_supplicants 这个是wpa_supplicants的运行路径,wpa_supplicants的配置文件会指定ctrl_interface 到这里,默认是/var/run/wpa_supplicants
三:扫描遍历wifi热点及配网
1 : ./wpa_supplicant -i wlan0 -c wpa_supplicant.conf -B
wpa_supplicant.conf 配置如下
ctrl_interface=/tmp/wpa_supplicants
update_config=1
2: 扫描WiFi热点
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants scan
注意1:如果没有加-p指定 wpa_supplicants路径,则会提示下面错误,因为默认路径为
/var/run/wpa_supplicant,或者将配置中的/tmp/wpa_supplicants改成/var/run/wpa_supplicant则无此问题不用-p参数
Failed to connect to non-global ctrl_ifname: wlan0 error: No such file or directory
注意2:
scan扫描过程需要一定的时间,扫描过程中将使wpa_supplicant处于busy状态,再次发送scan扫描将失败
3:查看扫描结果
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants scan_results
注意:
scan_results打印出来的是可获得的wifi的列表,列表包含WiFi热点的ssid(名称)、bssid(mac地址)、signal level(信号强度,单位dBm)、flags(加密类型)等。
4:连接wifi热点
4.1:增加一个网络id,后面根据这个网络编号来配置wifi热点,我这里得到的编号为0
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants add_network
4.2:配置wifi热点的名字ssid
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants set_network 网络编号 ssid '"wifi名字'
eg:./wpa_cli -i wlan0 -p /tmp/wpa_supplicants set_network 0 ssid '"hfzuo"'
4.3: 配置wifi热点的密码psd
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants set_network 网络编号 psk '"密码"'
eg:./wpa_cli -i wlan0 -p /tmp/wpa_supplicants set_network 0 psk '"88888888"'
4.4 查看网络列表
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants list_network
4.5 选择网络
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants select_network 网络编号
eg:./wpa_cli -i wlan0 -p /tmp/wpa_supplicants select_network 0
4.6 请求动态分配IP
udhcpc -i wlan0 &
4.7 查看wifi状态
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants status
4.8 保存wifi热点信息
./wpa_cli -i wlan0 -p /tmp/wpa_supplicants save_config
保存的wifi热点信息到配置文件/etc/wpa_supplicant.conf 里了
下次直接运行./wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B 既可自动连上hfzuo的热点
wpa_supplicant.conf 内容如下
ctrl_interface=/tmp/wpa_supplicants
update_config=1
network={
ssid="hfzuo"
psk="88888888"
proto=WPA2
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
}
四:其他未测试验证的命令
1:停止使用wifi热点(此时还连载wifi热点,只是没有激活使用)
wpa_cli -i wlan0 disable_network 网络编号
2:使能wifi热点
wpa_cli -i wlan0 enable_network 网络编号
3:断开wifi热点
wpa_cli -i wlan0 disconnect
4:重连wifi热点
wpa_cli -i wlan0 reconnect
5:删除wifi热点
wpa_cli -i wlan0 remove_network 网络编号