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控制分为三大组件:

  1. 客户端程序,包括wpa_cli命令行或java图形界面程序,通过unix本地socket与wpa_supplicant daemon服务通信,发送命令 并 接收结果;
  2. wpa_supplicant daemon服务,对应上述中间部分,功能是“上传下达”。所有客户端通过它控制硬件网卡,通过发送字符串命令控制是否扫描AP,提取扫描结果和是否关联 AP等操作,同时将驱动的执行状态发送给用户。该服务是设计支持多种无线网卡芯片,因此各个厂商共同提供了一个通用接口给wpa_supplicant调用;
  3. 网卡驱动;

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基本概念相关推荐

  1. 【每日反刍】——Day1(指针概念)

  2. 康复训练Day1——机器学习基本概念

  3. WiFi Direct 在wpa_supplicant中的流程一(初始化P2P)

    P2P在wpa_supplicant中的初始化流程 WIFI-Driect在WPA_S中的初始化流程: 注册action wpas_p2p_init() 代码段1 wpas_p2p_init() 代码 ...

  4. 博通wifi驱动详解

    1        WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...

  5. android WIFI学习总结

    转自 http://blog.csdn.net/ldinvicible/article/details/11909411 1        WLAN技术 WLAN是英文WirelessLAN的缩写,就 ...

  6. nexus5 博通芯片WIFI详解 (1)

    1        WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...

  7. wifi技术从了解到熟悉3-----wifi的系统结构分析

    1.wifi系统的层次结构 可以从下面看出分为3层: 平台API android系统 硬件和驱动 2.wifi的系统结构 (1)Android.net.wifi包作为Android平台的API供Jav ...

  8. buildroot学习(十)——at91sam9g45软件平台更新

    转载地址:https://blog.csdn.net/srf1986/article/details/52474697 (136)spice protocol In computing, SPICE ...

  9. 最新python全栈3期高级开发工程师 独家完整版

    课程目录: │   ├─1-10 │  │   │  ├─day01 │  │      01 python全栈s3 day1 计算机发展史.mp4 │  │      02 python全栈s3 d ...

  10. 2018 python全栈3期高级开发工程师 独家完整版

    课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 day1 计算机系统.mp4 │ │ ...

最新文章

  1. JAVA min()_Java min()方法
  2. hihoCoder#1037 : 数字三角形(DP)
  3. 经典算法系列之(一) - BitMap [数据的压缩存储]
  4. cassss服务未启动_不要再本地启动项目调试了,试SpringBoot远程调试你会发现新大陆!...
  5. [转载] JAVA中transient 关键字
  6. python类:类方法和静态方法
  7. 【JZOJ4762】【NOIP2016提高A组模拟9.7】千帆渡
  8. SpringBoot 分布式session
  9. ajax hash缓存
  10. 中国互联网大人物直播简史
  11. Android netd 简单分析和配置iptable
  12. 《幽途无人葬》游戏指南
  13. 电子元器件3D模型免费下载资源
  14. python27.dll引起的appcrash_Python已经停止工作(APPCRASH)Python
  15. #torch.bmm()函数解读
  16. sql server中如何修改视图中的数据?
  17. java 字节流 字符流 的详细介绍
  18. Vue2+Openlayer使用modify修改要素
  19. position为absolute与fixed区别
  20. 【我的Android进阶之旅】 Android Studio插件之Jenkins插件介绍

热门文章

  1. java severs_openssl简介-指令s_server
  2. (五)可重入锁ReentrantLock的底层原理实现?
  3. C语言结构体struct LNode *p ,LNode *p ,Linklist p
  4. 蓝桥杯第十二届省赛JAVA C组 试题 F: 时间显示
  5. java math 三角函数_Java中的三角函数
  6. PowerPoint-漂亮表格三招
  7. 中国民营航天公司罗列火箭发射火箭发动机
  8. SEO和SEM的区别是什么?
  9. 计算机专业拼音怎样写,单板计算机拼音
  10. 使用Xshell重启远程服务器指令