Android wpa_cli 調試方法

背景:今天想玩一玩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:on

sit0      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:on

tunl0     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=1
ctrl_interface=/data/misc/wifi/sockets
eapol_version=1
ap_scan=1
fast_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_beta
Copyright (c) 2004-2013, Jouni Malinen <[email protected]> and contributors

This 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命令

> scan
OK
<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 / ssid
0c:72:2c:44:10:9e       2437    -70     [WPS][ESS]      SS
d4:61:2e:a2:b9:e5       2437    -57     [WPA2-PSK-CCMP][ESS]    HUAWEI G9 Youth
9c:21:6a:d3:9e:a2       2437    -72     [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] helezu
5c: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 WPA2
OK
> enable_network 1
OK
<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來完成,這裏就不說了。

發佈了58 篇原創文章 · 獲贊 46 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章