Android wifi探究一:初步认识wpa_supplicant与wifi框架梳理

平时和wifi打交道还算比较多吧,wifi出了问题就只能找大神解决,这是件很令人伤感的事情。所以就想自己分析下android源码中wifi的框架,以后wifi出了问题,自己也能尝试的解一解。分析过程必定会有很多理解不到位或者错误的地方,欢迎大家不吝啬恶毒之词,使劲拍砖。

一.认识wpa_supplicant

wpa_supplicant是Android平台使用的用来管理wifi的应用程序,它可以支持WEP,WPA/WPA2和WAPI无线协议和加密认证。wpa_supplicant会操作驱动程序和wifi网卡交互,它同时是一个服务器,通过socket,我们可以和它建立连接,然后就可以通过命令和它交互,让它帮我们实现wifi连接断开等操作。
为了更好的认识和理解wpa_supplicant的功能,我们可以先尝试使用命令来连接wifi,感受下wpa_supplicant的作用。
在android系统中,当我们打开wifi后,wpa_supplicant就启动了,
我们不需要手动来启动。这点可以通过ps | grep wpa_supplicant来查看,结果如下:
wifi 2955 2947 4932 2596 poll_sched b6e22138 S wpa_supplicant
与wpa_supplicant同时存在的是wpl_cli,它是一个客户端,它实现了和wap_supplicant连接等功能,我们可以通过它和wap_supplicant交互。
要使用wpa_cli,首先得过得root权限,没有root权限的话连接会失败。
使用wap_cli的第一步就是启动wpa_cli:
wpa_cli -i wlan0 -p /data/misc/wifi/sockets/

-i指的是网卡接口
-p值得是wap_supplicant.conf所在的路径,具体的平台会有不同。

启动以后进入交互模式,我们可以使用如下命令完成wifi的连接:

1.scan

扫描附近的热点
/> scan
OK

2.scan_results

获取扫描的结果
/> scan_results
bssid / frequency / signal level / flags / ssid
20:f4:1b:83:40:e4 2462 -63 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] ROC
80:89:17:a1:a8:ee 2437 -64 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] samuel
80:89:17:a1:a8:e4 2437 -67 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TV-WIFI
80:89:17:9f:d3:ba 2412 -73 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] xrr
f4:ec:38:7b:2c:96 2437 -75 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] TP-LINK_7B2C96
1c:fa:68:50:8a:76 2462 -71 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] RDSPEED100M
d0:c7:c0:fd:86:64 2437 -73 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] yingyunguanli-huiyishi
4e:e0:10:c2:44:57 2462 -59 [WPA2-PSK-CCMP][ESS] hellowifi
4e:e0:10:c2:48:5d 2462 -70 [WPA2-PSK-CCMP][ESS] ADESKTOP-93DNJ6F
ac:e0:10:c2:63:bc 2412 -66 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] wifi
cc:34:29:2c:7f:e8 2412 -76 [WPA-PSK-TKIP][WPA2-PSK-TKIP][ESS] dlink

3.add_network

添加网络
通过查看扫描的结果,我们选择一个要连接的wifi,比如hellowifi
这个时候,我们首先要添加一个网络。
/> add_network
2
这个2是wpa_supplicant给我们返回的一个值,代表了这个网络,以后我们需要操作这个网络就要使用这个值。

4.设置ssid和密码

ssid就是热点的名字,这里就是hellowifi.
/> set_network 2 ssid “hellowifi”
OK
/> set_network 2 psk “11223344”
OK
psk是WPA2-PSK模式下标示wifi密码的名字。如果是没有加密:
/>set_network 2 key_mgmt NONE
如果是WEP安全模式:
/>set_network 2 wep_key0 “your ap passwork”

5.enable_network

使能wifi

/> select_network 2
OK
选择网络是可选的,如果当前已经连接了一个wifi,你应该重新选择一个网络。
/> enable_network 2
OK

6.切换wifi

如果我们当前有多个网络,我们可以切换:
/> select_network 0
OK
/> enable_network 0
OK
网络0中的wifi将会被连接

二.wifi整体框架

尝试了使用命令行连接和断开wifi后,我们可以开始思考android源码中是怎么和wpa_supplicant交互的?Android系统中wifi框架是怎样的?
下面我根据自己的理解绘制的一张简单的示意图:
这里写图片描述
从中可以看出,wifi.c是和wpa_supplicant直接交互的文件。client通过套接字和wap_supplic

  • 20
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Android中调试WiFi,通常会使用wpa_supplicantwpa_cli。下面是一些总结和步骤: 1. 在设备上运行wpa_supplicant 在设备上运行wpa_supplicant,它是一个用于处理WiFi连接的后台进程。可以在终端中使用以下命令启动它: ``` wpa_supplicant -iwlan0 -Dwext -c /data/misc/wifi/wpa_supplicant.conf ``` 其中,`wlan0` 是设备的WiFi接口名称,`wext` 是驱动程序的类型,`/data/misc/wifi/wpa_supplicant.conf` 是包含WiFi配置信息的文件路径。 2. 使用wpa_cli进行WiFi连接 wpa_cli是一个命令行工具,用于与wpa_supplicant进行交互并管理WiFi连接。可以在终端中使用以下命令启动它: ``` wpa_cli -iwlan0 ``` 此时会进入wpa_cli交互模式。可以使用以下命令执行一些操作: - `scan` 扫描可用的WiFi网络 - `scan_results` 查看扫描结果 - `add_network` 添加一个新的WiFi网络配置 - `set_network` 设置WiFi网络配置 - `enable_network` 启用WiFi网络 - `disable_network` 禁用WiFi网络 - `status` 查看当前连接状态 例如,如果要连接到名为“mywifi”的WiFi网络,可以执行以下步骤: 1. 扫描可用的WiFi网络 ``` > scan ``` 2. 查看扫描结果 ``` > scan_results ``` 会显示可用的WiFi网络列表,找到名为“mywifi”的网络并记下其network id。 3. 添加一个新的WiFi网络配置 ``` > add_network ``` 会返回一个新的network id。 4. 设置WiFi网络配置 ``` > set_network <network_id> ssid "mywifi" > set_network <network_id> psk "mypassword" ``` 其中,`<network_id>` 是上一步中返回的新的network id,`mywifi` 是WiFi网络的SSID,`mypassword` 是WiFi网络的密码。 5. 启用WiFi网络 ``` > enable_network <network_id> ``` 6. 查看连接状态 ``` > status ``` 如果连接成功,会显示类似于以下内容的信息: ``` wpa_state=COMPLETED ip_address=192.168.1.100 ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值