admin管理员组文章数量:1341762
前言:
在使用wpa_cli去连接wifi之前我们先了解一下wpa_supplicant。
wpa_supplicant是什么:
是一个项目开源源码,被谷歌修改后加入了Andriod移动平台,它实现了Station对无线网络进行管理和控制的功能,wpa_supplicant是linux系统下一个非常强大的无线网卡管理程序
wpa_supplicant有什么作用:
主要用来加密的,主要支持OPEN,WEP,WPA(TKIP),WPA2(AES)等类型的无线协议与加密认证
wpa_supplicant工作内容:
通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。
wpa_supplicant三个成果:
- 是WiFi驱动和用户的中转站
- 对协议的支持。
- 加密认证的支持
wap_cli与wpa_supplicant关系
经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
换句话说:
wpa_supplicant工具包含wpa_supplicant和wpa_cli这2个程序,其中wpa_supplicant程序作为服务端在后台运行,服务wpa_cli客户端的请求,从而实现WiFi的配置连接
wap_supplicant软件架构
安卓wifi框架图
由上图知,wpa_cli是位于Framework中的WifiService,wpa_supplicant也清晰可见,位于kernel智商。
wap_cli连接wifi
在进行wpa_cli连接之前,运行wpa_supplicant,wpa_supplicant程序作为wpa_cli的服务端,必须先启动后,才能给wpa_cli访问使用。
- 检查自己的网口(如wlan0)是否开启,可以进入adb shell后,使用如下命令
#:ifconfig
如果没有开启,可以使用以下命令(效果相当于wifi setting的开启):
#: ifconfig wlan0 up
开启成功执行ifconfig有以下显示:
wlan0 Link encap:Ethernet HWaddr 36:1b:02:76:0b:91 Driver icnss
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3000
RX bytes:0 TX bytes:0
- 启动wpa_supplicant服务器:
bash #: /vendor/bin/hw/wpa_supplicant -iwlan0 -c/data/vendor/wifi/wpa/wpa_supplicant.conf -B
解释一下上面的命令:
- /vendor/bin/hw/wpa_supplicant :表示wpa_supplicant可执行程序,并非wpa_supplicant.conf配置文件
- -B:表示将守护进程wpa_supplicant 挂到后台运行
- -iwlan0:网络接口wlan0
- 注意:wpa_supplicant的路径各有不同,wpa_supplicant.conf 路径也各有不同 ,因为AndroidPie9.0 改变了wpa_supplicant.conf 和 ctrl_interface 的路径,所以能正确启动wpa_supplicant的关键就是这边要指定正确的参数路径。
- -i:指定网口;
- -D:指定驱动类型(可以是多个驱动程序:nl80211,wext)
- -c:指定了wpa_supplicant的配置文件。
- -C : ctrl_interface parameter
开启wpa_cli
格式:wpa_cli -i网口 -p socket所在路径
wpa_cli -i wlan0 -p/data/vendor/wifi/wpa/sockets/
当然,p/data/vendor/wifi/wpa/sockets/
默认情况下可以省略,为了更好的解释,这个是wlan0的路径
成功开启wpa_cli的情况:
wpa_cli v2.10-devel-11
Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi> and contributors
This software may be distributed under the terms of the BSD license.
See README for more details.
Interactive mode
- 添加新的网络连接:
add_network
1
set_network 1 ssid “HUAWEI”//ssid
OK
set_network 1 key_mgmt WPA-PSK//设置密码管理方式
OK
set_network 1 psk “xx123456”//设置密码
OK
save_config//保存配置
OK
enable_network 1//使能网络
OK
我们使用list_network看下我们已经加入的网络信息:
> list_network
network id / ssid / bssid / flags
0 HUAWEI any
此时应该如果出现了错误:此时是网口(wlan0)未打开,那表示 wpa_cli 没有和wpa_supplicant 建立 socket 连接
status
wpa_state=INTERFACE_DISABLED
p2p_device_address=5e:52:ea:b4:8b:c2
address=fa:8a:fa:16:55:bf
uuid=02e63f31-bd2c-5cc3-9346-5baf6ff11365
<3>CTRL-EVENT-STATE-CHANGE id=0 state=1 BSSID=00:00:00:00:00:00 SSID=thundersoft
如果正确,应该是如下情况:
> status
bssid=9c:3a:9a:87:00:20
freq=2437
ssid=HUAWEI
id=0
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
p2p_device_address=5e:52:ea:b4:8b:c2
address=fa:8a:fa:16:55:bf
uuid=02e63f31-bd2c-5cc3-9346-5baf6ff11365
<3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=9c:3a:9a:87:00:20 SSID=HUAWEI
<3>CTRL-EVENT-CONNECTED - connection to 9c:3a:9a:87:00:20 completed (auth) [id=0 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=0 state=6 BSSID=9c:3a:9a:87:00:20 SSID=HUAWEI
<3>Associated with 9c:3a:9a:87:00:30
<3>CTRL-EVENT-CONNECTED - Connection to 9c:3a:9a:87:00:30 completed [id=0 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=9c:3a:9a:87:00:30 SSID=HUAWEI
<3>CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
现在就已经连接成功了,通过wpa_cli连接到指定AP后,此时是不能上网的,因为还未分配正确的IP地址,要分配正确IP地址。
- 给连接上网络的手机分配ip:
# ifconfig wlan0 192.168.18.11
执行ifconfig:
# ifconfig
wlan0 Link encap:Ethernet HWaddr fa:8a:fa:16:55:bf Driver icnss
inet addr:192.168.18.11 Bcast:192.168.18.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:266 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3000
RX bytes:37944 TX bytes:750
看到了我们分配到的ip了
我们ping一下:
# ping 192.168.18.11
PING 192.168.18.11 (192.168.18.11) 56(84) bytes of data.
64 bytes from 192.168.18.11: icmp_seq=1 ttl=64 time=0.371 ms
64 bytes from 192.168.18.11: icmp_seq=2 ttl=64 time=0.290 ms
64 bytes from 192.168.18.11: icmp_seq=3 ttl=64 time=0.289 ms
64 bytes from 192.168.18.11: icmp_seq=4 ttl=64 time=0.274 ms
64 bytes from 192.168.18.11: icmp_seq=5 ttl=64 time=0.282 ms
64 bytes from 192.168.18.11: icmp_seq=6 ttl=64 time=0.288 ms
--- 192.168.18.11 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5186ms
rtt min/avg/max/mdev = 0.274/0.299/0.371/0.032 ms
未丢包!
到这里我们的连接就结束了
如果只想知道一种,就可以不看下面了,下面这些命令都是在客户端中进行:
- scan : 扫描附近AP
- scan_result :列出最近一次扫描的结果
- list_networks : 列出添加的所有AP
- add_network :添加一个AP
- set_network :设置指定AP的相关参数,如 ssid、密码等,具体可参考文件:wpa_supplicant.conf
- enable_network : 连接指定AP,成功执行该命令后,将会连接到指定的AP,如果未成功连接,请检查AP参数是否有误。
不进入wpa_cli,直接在adb shell内进行连接
启动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> key_mgmt WPA-PSK
保存连接
wpa_cli -i wlan0 save_config //信息保存到默认的配置文件中
断开连接
wpa_cli -i wlan0 disable_network <network id>
连接已有连接
wpa_cli -i wlan0 list_network //列举保存过得连接
wpa_cli -i wlan0 select_network <network id> //连接指定的ssid
使能制定的ssid
wpa_cli -i wlan0 enable_network <network id>
本文标签: WiFiwapcliwpasupplicantwpacli
版权声明:本文标题:wap_cli连接wifi(wpa_cli与wpa_supplicant的理解) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1740336569a2263307.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论