wpa_supplicat学习笔记

wpa_supplicat

wpa_supplicat是一个开源软件项目。

hostapd是ap端解密认证工具。
img

wpa_supplicant是wifi客户端(client)加密认证工具,wpa_supplicant支持wep、wpa、wpa2等完整的加密认证。他实现了Station对无线网络进行管理和控制的功能。

wpa_supplicant运行于后台,它需要借助控制台工具wpa_cli来进行手动操作。
img

wpa_supplicant本是开源项目源码,被谷歌修改后加入Android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。

​ 目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。
​ wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。
​ 经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

Using wpa_supplicant

Following steps are used when associating with an AP using WPA:

  • wpa_supplicant requests the kernel driver to scan neighboring BSSes
  • wpa_supplicant selects a BSS based on its configuration
  • wpa_supplicant requests the kernel driver to associate with the chosen BSS
  • if WPA-EAP: integrated IEEE 802.1X Supplicant completes EAP authentication with the authentication server (proxied by the Authenticator in the AP)
  • If WPA-EAP: master key is received from the IEEE 802.1X Supplicant
  • If WPA-PSK: wpa_supplicant uses PSK as the master session key
  • wpa_supplicant completes WPA 4-Way Handshake and Group Key Handshake with the Authenticator (AP). WPA2 has integrated the initial Group Key Handshake into the 4-Way Handshake.
  • wpa_supplicant configures encryption keys for unicast and broadcast
  • normal data packets can be transmitted and received

整体通信架构:

wpa_supplicant在启动时,会初始化三个interface,用于跟上下层进行通信,其中有driver interface、L2 interface、 control interface。 

三个interface的作用如下:

1, init driver interface:处理kernel与wpa_supplicant之间的cmd跟event
2, init L2 interface: 处理EAPOL Frame与kernel通信(密码认证4次握手过程)
3, init control interface: 处理上层与wpa_supplicant cmd与event通信

以Android wpa_supplicant为例:
当启动wpa_supplicant时,会创建3个socket,分别为:/data/system/wpa_supplicant/wlan0、/data/misc/wifi/sockets/wlan0、/data/misc/wifi/sockets/p2p0,其中/data/misc/wifi/sockets/wlan0与/data/misc/wifi/sockets/p2p0是同级关系,只是功能不一样,这里只说明一下wlan0即可。
此时,
control interface ---->> /data/system/wpa_supplicant/wlan0
L2\driver interface ---->> /data/misc/wifi/sockets/wlan0(/data/misc/wifi/sockets/p2p0)
当上层的WifiMonitor去连接到wpa_supplicant时,会创建/data/misc/wifi/sockets/wpa_xxx1与/data/misc/wifi/sockets/wpa_xxx2两个sockets,这两个socket都连接到/data/system/wpa_supplicant/wlan0。
其中一个用于上层往wpa_supplicant发送命令。另一个用于监听wpa_supplicant发上来的events。
而内部则是创建两个socket, L2 socket与 driver socket,连接到/data/misc/wifi/sockets/wlan0(/data/misc/wifi/sockets/p2p0),driver socket用于wpa_supplicant与kernel driver进行命令、消息的监听,L2 socket用于ap连接的四次握手处理。

wpa_supplicat通信架构

相关参考资料:
https://zhuanlan.zhihu.com/p/24246712

https://blog.csdn.net/u013095415/article/details/81478806

https://blog.csdn.net/gh201030460222/article/details/83067155

https://blog.csdn.net/weixin_34234823/article/details/86025457

https://blog.csdn.net/lb5761311/article/details/78317255

https://blog.csdn.net/u013256622/article/details/72921974

https://blog.csdn.net/u013256622/article/details/72900828

https://blog.csdn.net/u011913612/article/details/52671436

很好的一个讲解 https://blog.csdn.net/emdfans/article/details/78262953

https://www.jianshu.com/p/78e48343f89b

d-bus

https://www.cnblogs.com/klb561/p/9135642.html

https://www.cnblogs.com/ningskyer/articles/9547933.html

http://www.21ic.com/tougao/article/11409.html

https://www.csslayer.info/wordpress/tag/dbus/

https://www.jianshu.com/p/c073daaf427f

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值