Android wpa_cli 调试方法

来源:互联网 发布:淘宝店铺交易额查询 编辑:程序博客网 时间:2024/05/18 02:46

背景:今天想玩一玩wpa_cli,以了解wpa_supplicant的一些流程,结果却一直连接不上。。。记录一下如何使用wpa_cli来进行wifi调试。

1、启动WLAN

(1)加载驱动
一般来说,android系统里面,打开wifi的时候会加载驱动,关闭则会卸载wifi驱动。手动调试的时候,先调用insmod命令加载指定的wifi驱动。
再调用iwconfig可以看到驱动是否加载成功,如下,可以看到wlan0已经有了,则驱动加载成功。

eth0      no wireless extensions.wlan0     IEEE 802.11bgn  ESSID:off/any            Mode:Managed  Access Point: Not-Associated   Tx-Power=12 dBm             Retry short limit:7   RTS thr:off   Fragment thr:off          Encryption key:off          Power Management:onsit0      no wireless extensions.lo        no wireless extensions.wlan1     IEEE 802.11bgn  ESSID:off/any            Mode:Managed  Access Point: Not-Associated   Tx-Power=12 dBm             Retry short limit:7   RTS thr:off   Fragment thr:off          Encryption key:off          Power Management:ontunl0     no wireless extensions.

(2)打开wlan0
这个没什么好说的,ifconfig wlan0 up

2、启动wpa_supplicant

命令如下:可以参考下自己init.xxx.rc是如何配置的,参数可能会不一样。

wpa_supplicant –iwlan0 –Dnl80211 –c 配置文件 &

-i:指定网口;
-D:指定驱动类型;
-c:指定了wpa_supplicant的配置文件。

例如:

wpa_supplicant -d –iwlan0 –Dnl80211 –c/etc/wifi/wpa_supplicant.conf &

配置文件为/etc/wifi/wpa_supplicant.conf,-d参数是打开wpa_supplicant的打印。
配置文件如下:

update_config=1ctrl_interface=/data/misc/wifi/socketseapol_version=1ap_scan=1fast_reauth=1

ps:一开始老是运行不起来,在已经加载驱动,也已up wlan0的情况下,很可能是/data/misc/wifi/sockets的权限不足,导致无法创建wlan0 socket。

确保wpa_supplicant已经运行起来了,可以ps看下。

3、启动wpa_cli

wpa_cli -i网口 -p socket所在路径

例如像我刚才那么调用的话,则用下面命令启动:

wpa_cli -iwlan0 -p /data/misc/wifi/sockets/

进入如下界面则已经可以正常调试了。

wpa_cli v2.0-devel-4.4.2_rtw_r12456.20141113_betaCopyright (c) 2004-2013, Jouni Malinen <j@w1.fi> and contributorsThis software may be distributed under the terms of the BSD license.See README for more details.Interactive mode> 

如果一直显示如果出现“Could not connect to wpa_supplicant - re-trying”,那表示 wpa_cli 不能和wpa_supplicant 建立 socket 连接,这时要检查 wpa_supplicant 进程是否还在,还有socket所在路径wlan0是否存在(在我的例子是/data/misc/wifi/sockets/wlan0)。

4、扫描ap

输入scan命令

> scanOK<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=<3>CTRL-EVENT-SCAN-RESULTS <3>CTRL-EVENT-STATE-CHANGE id=-1 state=0 BSSID=00:00:00:00:00:00 SSID=> 

wpa_supplicant有“CTRL-EVENT-SCAN-RESULTS ”的回复,则可以输入scan_results可以看到扫描结果,如下图。

scan_results bssid / frequency / signal level / flags / ssid0c:72:2c:44:10:9e       2437    -70     [WPS][ESS]      SSd4:61:2e:a2:b9:e5       2437    -57     [WPA2-PSK-CCMP][ESS]    HUAWEI G9 Youth9c:21:6a:d3:9e:a2       2437    -72     [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] helezu5c:63:bf:5f:9c:be       2462    -82     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TOPVISION

5、连接

从扫描结果看HUAWEI G9 Youth这个热点是信号最强的。我们选择连接这个ap。

> add_network 1> set_network 1 ssid "HUAWEI G9 Youth"OK> set_network 1 key_mgmt WPA-PSK OK> set_network 1 psk "xx123456"   OK> set_network 1 pairwise CCMP OK> set_network 1 group CCMP   OK> set_network 1 proto WPA2OK> enable_network 1OK<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=<3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE <3>Trying to associate with d4:61:2e:a2:b9:e5 (SSID='HUAWEI G9 Youth' freq=2437 MHz)<3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID=<3>CTRL-EVENT-STATE-CHANGE id=1 state=6 BSSID=00:00:00:00:00:00 SSID=HUAWEI G9 Youth<3>Associated with d4:61:2e:a2:b9:e5<3>CTRL-EVENT-STATE-CHANGE id=1 state=7 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth<3>CTRL-EVENT-STATE-CHANGE id=1 state=8 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth<3>WPA: Key negotiation completed with d4:61:2e:a2:b9:e5 [PTK=CCMP GTK=CCMP]<3>CTRL-EVENT-CONNECTED - Connection to d4:61:2e:a2:b9:e5 completed (auth) [id=1 id_str=]<3>CTRL-EVENT-STATE-CHANGE id=1 state=9 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth

步骤如下:
(1)“add_network”,这里返回网络ID 为 1。
(2) 配置网络的 SSID,执行 set_network 1 ssid AP 的 SSID。
(3)配置网络的加密方式和密码。
(4)启动网络,执行“enable_network 0”。
(5)收到“CTRL-EVENT-CONNECTED”表示连接成功。

6、分配IP

此时已经连接上ap,dhcp分配一个IP即可。
输入 q 退出 wpa_cli,执行命令:dhcpcd wlan0
此时已经可以ping通了,在Android系统里,还需要设置DNS这些,在Android里,这些流程会有netd来完成,这里就不说了。

原创粉丝点击