wpa_supplicant详解

wpa_supplicant详解转自 http blog chinaunix net uid 29181887 id 4826168 html 目前可以使用 wireless tools nbsp 或 wpa supplicant 工具来配置无线网络 请记住重要的一点是 对无线网络的配置是全局性的 而非针对具体的接口 nbsp nbsp wpa supplicant 是一个较好的选择 但缺点是它不支持所有的驱动 请

转自:http://blog.chinaunix.net/uid-29181887-id-4826168.html

目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。

    wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络,它可以让您连接到那些使用WPA的AP。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。

关于WPA:

WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。
wpa_supplicant是一个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。
wpa_supplicant是一个 独立运行的 守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。

经过编译后 的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用 wpa_cli来搜索、设置、和连接网络。

Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,它是一个安全中间件,代码位于external/wpa_supplicant,为各种无线网卡提供统一的安全机制,wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信,如下图1所示:

wpa_supplicant详解

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



 Wpa_supplicant作用:

1、读取配置文件

2、初始化配置参数,驱动函数

3、让驱动scan当前所有的bssid

4、检查扫描的参数是否和用户设置的想否

5、如果相符,通知驱动进行权限 认证操作

6、连上AP


1.运行 wpa supplicant 程序

在init.rc里执行:wpa_supplicant /system/bin/wpa_supplicant-Dwext -ieth0 -c/data/wifi/wpa_supplicant.conf -f /data/wifi/wpa_log.txt

 对于 启动命令wpa_supplicant 带的 参数,用了 两个数据结构 来保存,

-c

: 配置文件名称

-C

: 控制接口名称

-D

: 驱动类型名称

-p

: 驱动参数

-b

: 桥接口名称








-d: 增加调试信息


2. wpa_supplicant 初始化流程

    2.1. main()函数:

    2.2. wpa_supplicant_init()函数:

a.打开debug 文件。
b.注册EAP peer方法。
c.申请wpa_global内存,该数据结构作为统领其他数据结构的一个核心, 主要包括四个部分:
wpa_supplicant *ifaces
   /*每个 网络接口 都有一个 对应的wpa_supplicant数据结构,该指针指向最近加入的一个,在wpa_supplicant数据结构中有指针指向next*/
wpa_params params
   /*启动命令行中带的通用的参数*/
ctrl_iface_global_priv *ctrl_iface 
/*global 的控制接口*/
ctrl_iface_dbus_priv *dbus_ctrl_iface
  /*dbus 的控制接口*/
d.设置wpa_global中的wpa_params中的参数。
e.调用eloop_init函数 将全局变量eloop中的user_data指针指向wpa_global。
f .调用wpa_supplicant_global_ctrl_iface_init函数初始化global 控制接口。












 

    2.3. wpa_supplicant_add_iface()函数:

wpa_supplicant_req_scan(wpa_s, interface_count, );

来主动发起scan,调用wpa_supplicant_ctrl_iface_init()函数,来初始化控制接口;对于UNIX SOCKET这种方式,其本地socket文件是由配置文件里的ctrl_interface参数指定的路径加上网络接口名称;

    2.4. wpa_supplicant_run()函数:

3. wpa_supplicant 的 对外 接口 分析

从通信层次上划分,wpa_supplicant提供 向上的 control interface,用于与其他模块(如UI)进行通信,其他模块可以通过control interface 来获取信息或下发命令。Wpa_supplicant通过socket通信机制实现 下行接口,与内核进行通信,获取信息或下发命令。

3.1.2 . ctrl interface: 与其他外部模块交互的控制接口。
例如,在初始化时,android 平台的wifi.c中的 wifi_connect_to_supplicant函数调用wpa_ctrl_open函数创建两个socket,一个是ctrl interface,另一个就是monitor interface, monitor interface这个接口用于监测从wpa_supplicant发出的event事件。这两个socket创建成功后,monitor interface 会发送ATTACH到wpa_supplicant模块 wpa_supplicant模块收到后,会将该客户端的socket信息记录下来,用于以后发送事件时用(由于用的是DGRAM的方式)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201798.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:35
下一篇 2026年3月20日 上午8:35


相关推荐

  • 单片机中步进电机c语言程序,用AT89C51单片机控制步进电机的汇编源程序

    单片机中步进电机c语言程序,用AT89C51单片机控制步进电机的汇编源程序下面程序完成的主要功能:实现步进电机的正反转,加速、减速;显示电机转速(转速级别)和工作状态(正转、反转、不转)。源程序SPEEDEQU10H;SPEED为转速等级标志,共7级,即1~7FXEQU11H;FX为方向标志COUNTEQU12H;COUNT中断次数标志ORG0000HAJMPMAINORG0003H;外部中断0入口地址,加速子程序AJMPUPORG001…

    2022年5月18日
    39
  • FFplay硬件加速[通俗易懂]

    FFplay硬件加速[通俗易懂]本文以ffmpeg-4.4源码为准,a.mp4下载链接:百度网盘,提取码:nl0s。FFplay硬件解码命令如下:ffplay.exe-vcodech264_cuvid-ia.mp4上面命令指定了NVIDIA的硬件解码器,h264_cuvid。在ffplay.c的代码里面硬件解码跟普通解码在逻辑上没有做什么特殊的处理。ffplay.c里面没有像ffmpeg.c那样支持-hwaccel这个选项,所以ffplay.c的硬件解码流程跟普通解码…

    2022年6月25日
    59
  • HtmlAgilityPack 总结(一)

    HtmlAgilityPack 总结(一)一个解析html的C#类库HtmlAgilityPack,今天终于有时间整理一下,并把Demo分享一下。HtmlAgilityPack是一个基于.Net的、第三方免费开源的微型类库,主要用于在服务器端解析html文档(在B/S结构的程序中客户端可以用Javascript、jquery解析html)。截止到本文发表时,HtmlAgilityPack的最新版本为1.4.6。下载地址:ht

    2022年7月15日
    14
  • Java PreparedStatement

    Java PreparedStatementJavaPreparedStatementisjustlikeaStatementandit’spartoftheJavaJDBCFramework.JavaPreparedStatement就像一个Statement,它是JavaJDBCFramework的一部分。ItisusedtoperformcrudoperationswithData…

    2022年6月6日
    43
  • Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    2021年10月4日
    34
  • 树莓派4B设置USB启动

    树莓派4B设置USB启动千呼万唤始出来!官方在2020-05-15发布了一个4B的beta版EEPROM固件更新,这次更新终于增加了期待已久的USB引导功能,今天这个教程就来讲一下如何使用USB而脱离SD卡启动树莓派4B。

    2022年5月18日
    93

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号