wpa_supplicant Day1: supplicant基本概念
1. WPA_supplicant基本理解
a) WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。
b) wpa_supplicant是一个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。
c) wpa_supplicant是一个 独立运行的 守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。
d) 经过编译后 的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用 wpa_cli来搜索、设置、和连接网络。
e) 目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。wpa_supplicant有部分驱动支持不完善,但支持WEP、WPA、WPA2加密。wireless-tools支持几乎所有的无线网卡和驱动,但只支持WEP加密。由于WEP在现在市面的路由器中已经几乎被淘汰,因此wpa_supplicant是一个较好的选择。
2. Android 平台 WiFi 框架
Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,它是一个安全中间件,代码位于external/wpa_supplicant,为各种无线网卡提供统一的安全机制,wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信,如下图所示:
2.1 对应上述结构,基于Android 的WiFi控制分为三大组件:
- 客户端程序,包括wpa_cli命令行或java图形界面程序,通过unix本地socket与wpa_supplicant daemon服务通信,发送命令 并 接收结果;
- wpa_supplicant daemon服务,对应上述中间部分,功能是“上传下达”。所有客户端通过它控制硬件网卡,通过发送字符串命令控制是否扫描AP,提取扫描结果和是否关联 AP等操作,同时将驱动的执行状态发送给用户。该服务是设计支持多种无线网卡芯片,因此各个厂商共同提供了一个通用接口给wpa_supplicant调用;
- 网卡驱动;
3. WPA_supplicant作用
a) 读取配置文件
b) 初始化配置参数,驱动函数
c) 让驱动scan当前所有的bssid
d) 检查扫描的参数是否和用户设置的相符
e) 如果相符,通知驱动进行权限认证操作
f) 连上AP
4. wpa_supplicant 的 对外 接口 分析
从通信层次上划分,wpa_supplicant提供 向上的 control interface,用于与其他模块(如UI)进行通信,其他模块可以通过control interface 来获取信息或下发命令。Wpa_supplicant通过socket通信机制实现 下行接口,与内核进行通信,获取信息或下发命令。
4.1 上行接口
a) Wpa_supplicant提供 两种方式的上行接口。一种基于传统dbus机制实现与其他进程间的IPC通信;另一种通过Unix domain socket机制 实现 进程间的IPC通信。
b) ctrl interface: 与其他外部模块交互的控制接口。例如,在初始化时,android 平台的wifi.c中的 wifi_connect_to_supplicant函数调用wpa_ctrl_open函数创建两个socket,一个是ctrl interface,另一个就是monitor interface, monitor interface这个接口用于监测从wpa_supplicant发出的event事件,此举可以降低通信的耦合性,避免response和event的相互干扰。 这两个socket创建成功后,monitor interface 会发送ATTACH到wpa_supplicant模块 wpa_supplicant模块收到后,会将该客户端的socket信息记录下来,用于以后发送事件时用(由于用的是DGRAM的方式)
4.2 下行接口
Wpa_supplicant提供的下行接口主要用于和kernel(driver)进行通信下发命令和获取信息。
Wpa_supplicant下行接口主要包括三种重要的接口:
1. PF_INET socket接口,主要用于向kernel 发送ioctl命令,控制并获取相应信息。
2. PF_NETLINK socket接口,主要用于 接收kernel发送上来的event 事件。
3. PF_PACKET socket接口,主要用于向driver传递802.1X报文。
5. main()函数:
在这个函数中,主要做了四件事。
a.解析命令行传进的参数。
b.调用wpa_supplicant_init()函数,做wpa_supplicant的初始化工作。
c.调用wpa_supplicant_add_iface()函数,增加网络接口。
d.调用wpa_supplicant_run()函数,让wpa_supplicant真正的run起来。
wpa_supplicant Day1: supplicant基本概念相关推荐
- 【每日反刍】——Day1(指针概念)
- 康复训练Day1——机器学习基本概念
- WiFi Direct 在wpa_supplicant中的流程一(初始化P2P)
P2P在wpa_supplicant中的初始化流程 WIFI-Driect在WPA_S中的初始化流程: 注册action wpas_p2p_init() 代码段1 wpas_p2p_init() 代码 ...
- 博通wifi驱动详解
1 WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...
- android WIFI学习总结
转自 http://blog.csdn.net/ldinvicible/article/details/11909411 1 WLAN技术 WLAN是英文WirelessLAN的缩写,就 ...
- nexus5 博通芯片WIFI详解 (1)
1 WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...
- wifi技术从了解到熟悉3-----wifi的系统结构分析
1.wifi系统的层次结构 可以从下面看出分为3层: 平台API android系统 硬件和驱动 2.wifi的系统结构 (1)Android.net.wifi包作为Android平台的API供Jav ...
- buildroot学习(十)——at91sam9g45软件平台更新
转载地址:https://blog.csdn.net/srf1986/article/details/52474697 (136)spice protocol In computing, SPICE ...
- 最新python全栈3期高级开发工程师 独家完整版
课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 d ...
- 2018 python全栈3期高级开发工程师 独家完整版
课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 day1 计算机系统.mp4 │ │ ...
最新文章
- JAVA min()_Java min()方法
- hihoCoder#1037 : 数字三角形(DP)
- 经典算法系列之(一) - BitMap [数据的压缩存储]
- cassss服务未启动_不要再本地启动项目调试了,试SpringBoot远程调试你会发现新大陆!...
- [转载] JAVA中transient 关键字
- python类:类方法和静态方法
- 【JZOJ4762】【NOIP2016提高A组模拟9.7】千帆渡
- SpringBoot 分布式session
- ajax hash缓存
- 中国互联网大人物直播简史
- Android netd 简单分析和配置iptable
- 《幽途无人葬》游戏指南
- 电子元器件3D模型免费下载资源
- python27.dll引起的appcrash_Python已经停止工作(APPCRASH)Python
- #torch.bmm()函数解读
- sql server中如何修改视图中的数据?
- java 字节流 字符流 的详细介绍
- Vue2+Openlayer使用modify修改要素
- position为absolute与fixed区别
- 【我的Android进阶之旅】 Android Studio插件之Jenkins插件介绍