Linux wpa_cli 调试方法

  记录一下如何使用wpa_cli来进行wifi调试。

1、启动WLAN

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

// ifconfig -a 查看
//tmp # ifconfig -a
lo        Link encap:Local Loopback  
          LOOPBACK  MTU:16436  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:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  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:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
          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:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 

(2)打开wlan0 
  ifconfig wlan0 up

2、启动wpa_supplicant

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

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

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

例如

RDA 512C方案:
wpa_supplicant_8 -iwlan0 -Dwext -c/etc/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已经运行起来。

3、启动wpa_cli进入交互模式

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

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

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

RDA在/bin目录运行:
wpa_cli_8

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

/bin # wpa_cli_8 -i wlan0
wpa_cli v0.8.x
Copyright (c) 2004-2011, Jouni Malinen <j@w1.fi> and contributors

This program is free software. You can distribute it and/or modify it
under the terms of the GNU General Public License version 2.

Alternatively, this software may be distributed under the terms of the
BSD license. See README and COPYING for more details.


Selected interface 'wlan0'

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
>SCANNING, suspend MSDU transmission ...
 SYNC - BBP R4 to 20MHz.l
MT7601_ChipSwitchChannel: SwitchChannel#1(RF=15, 1T)
MT7601_ChipSwitchChannel: SwitchChannel#2(RF=15, 1T)
MT7601_ChipSwitchChannel: SwitchChannel#3(RF=15, 1T)
SYNC - End of SCAN, restore to 20MHz channel 1, Total BSS[24]
SCAN done, resume MSDU transmission ...
CNTL - All roaming failed, restore to channel 1, Total BSS[24]
===>rt_ioctl_giwscan. 24(24) BSS returned, data->length = 4082
<3>CTRL-EVENT-SCAN-RESULTS 
<3>WPS-AP-AVAILABLE 
TSSI = 0x4F
temperature = 0xFFFFFFFB
PacketType = 0xBD
tx_11g_rate: b
Channel PWR + MCS PWR = 22000
TargetPower: 0x2428f(148111)
tssi_m_dc: 78
TssiLinear0: 79
TssiDC0: 1
tssi_offset: 0
tssi_offset<<9: 0
TssiSlope: 128
tssi_db: 1209
CurrentPower: 154752
PowerDiff: -6641
final PowerDiff: -2(0xfffffffe)
MAC 13b4: 0xc9540029
MT7601AsicTemperatureCompensation::Disable PLL Lock Protect.
查看scan_result结果:
> scan_results
bssid / channel / signal level / quality /flags / ssid
20:6b:e7:f2:7a:50       1       -51     99/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      KAHUNA
34:96:72:f1:11:9a       6       -51     99/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Panelmate
b8:f8:83:35:21:e6       6       -51     99/100  [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS]    TP-LINK_YSKJ
0a:d4:0c:c4:be:59       1       -33     100/100 [WPA2-PSK-CCMP][ESS]    A_Clair_Cl
d4:6a:a8:96:60:40       5       -51     99/100  [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS]    ChinaNet-Rg9G
50:bd:5f:1c:a1:04       11      -61     73/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      kitking_____
fc:3d:93:b4:01:3a       1       -57     83/100  [WPA2-PSK-CCMP][ESS]    Xiaomi_Lee
30:fc:68:ed:f4:d9       11      -63     68/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_F4D9
d0:c7:c0:1b:b8:a6       11      -65     63/100  [WPA2-PSK-CCMP][ESS]
bc:46:99:e2:b4:b4       1       -65     63/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_B4B4
8c:a6:df:40:35:26       11      -67     57/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_3526
60:b6:17:4d:c8:c8       13      -63     68/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] ChinaNet-PDU9
c4:c7:55:0f:78:43       1       -63     68/100  [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS]       ChinaNet-VUEP
a8:6b:7c:41:64:81       1       -69     52/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      jinghua
06:69:68:99:48:d1       6       -69     52/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TPGuest_guest
f0:b4:29:d3:68:4f       7       -65     63/100  [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS]       Kitking_01A
f4:83:cd:f9:fb:2b       1       -71     47/100  [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][ESS]    TP-LINK_FB2B
24:69:68:99:48:d1       6       -71     47/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_XU
b0:e2:e5:c8:4d:fa       7       -67     57/100  [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] ChinaNet-UZah
02:0e:5e:29:77:ce       1       -71     47/100  [WPA2-PSK-TKIP+CCMP][ESS]
60:bb:0c:46:7f:8c       1       -75     37/100  [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS]       ChinaNet-TwnA
fa:8f:ca:7e:49:e2       6       -37     100/100 [ESS]   Cast-Kitking.m
f2:b4:29:d1:68:4f       7       -63     68/100  [WPS][ESS]        ____________WiFi_684E
8c:f2:28:68:3c:9e       1       -75     37/100  [ESS]   MERCURY_3C9E

5、连接

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

> add_network 
0
> set_network 0 ssid "KAHUNA"
OK
> set_network 0 key_mgmt WPA-PSK 
OK
> set_network 0 psk "aa6396aa"   
OK
> set_network 0 pairwise CCMP 
OK
> set_network 0 group CCMP   
OK
> set_network 0 proto WPA2
OK
> enable_network 0
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,执行命令:udhcpc -i wlan0
此时已经可以ping通了,在Android系统里,还需要设置DNS这些,在Android里,这些流程会有netd来完成,这里就不说了。

简单描述交互模式如下:

insmod mt7601Usta.ko

ifconfig wlan0 up

wpa_supplicant_8 -iwlan0 -Dwext -c/etc/wpa_supplicant.conf &

交互模式:

wpa_cli_8 -i wlan0
1)add_network//添加网络
2)scan //搜索网络
3)scan_result //显示搜索结果
4)set_net 0 ssid "xxxx" //热点名字
5)set_net 0 psk "xxxxx" //热点密码
6)select_net 0

7)退出交互模式 q

完成以上应该可以连上,但是还没有分配ip

8)动态分配IP
udhcpc -i wlan0

原文地址:https://www.cnblogs.com/jiangzhaowei/p/8256920.html