wap

您所在的位置:网站首页 adb连接指定wifi wap

wap

2023-11-03 08:04| 来源: 网络整理| 查看: 265

前言:

在使用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 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 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 CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=9c:3a:9a:87:00:20 SSID=HUAWEI CTRL-EVENT-CONNECTED - connection to 9c:3a:9a:87:00:20 completed (auth) [id=0 id_str=] CTRL-EVENT-STATE-CHANGE id=0 state=6 BSSID=9c:3a:9a:87:00:20 SSID=HUAWEI Associated with 9c:3a:9a:87:00:30 CTRL-EVENT-CONNECTED - Connection to 9c:3a:9a:87:00:30 completed [id=0 id_str=] CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=9c:3a:9a:87:00:30 SSID=HUAWEI 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 : 扫描附近APscan_result :列出最近一次扫描的结果list_networks : 列出添加的所有APadd_network :添加一个APset_network :设置指定AP的相关参数,如 ssid、密码等,具体可参考文件:wpa_supplicant.confenable_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 //添加一个网络连接,会返回 wpa_cli set_network ssid '"name"' //ssid名称 wpa_cli set_network psk '“psk”'  //密码 wpa_cli set_network key_mgmt WPA-PSK

保存连接

wpa_cli -i wlan0 save_config //信息保存到默认的配置文件中

断开连接

wpa_cli -i wlan0 disable_network

连接已有连接

wpa_cli -i wlan0 list_network //列举保存过得连接 wpa_cli -i wlan0 select_network //连接指定的ssid

使能制定的ssid

wpa_cli -i wlan0 enable_network


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3