0

0

玩转「Wi-Fi」系列之wpa_supplicant 目录介绍(八)

蓮花仙者

蓮花仙者

发布时间:2025-09-02 09:15:38

|

354人浏览过

|

来源于php中文网

原创

wpa_supplicant 是一个庞大的开源项目,最新版本为2016-10-v2.6。当前wifi应用层的操作大多是对wpa_supplicant的封装,包括android系统。初步统计,wpa_supplicant的源文件数量为552个,代码行数达到20万。分析这样一个庞大的项目是一项艰巨的任务,请读者做好充分准备。

wpa_supplicant的源码目录结构如下:

├── ap // hostapd相关功能 ├── common // 通用函数 ├── crypto // 各种加密功能 ├── drivers // 对接底层驱动,包括wext和nl80211 ├── eap_common // eap相关 ├── eapol_auth ├── eapol_supp ├── eap_peer ├── eap_server ├── fst // fst模块 ├── l2_packet // 链路层的访问封装 ├── p2p // WiFi P2P协议 ├── pae // ieee802协议 ├── radius // RADIUS:Remote Authentication Dial In User Service消息处理 ├── rsn_supp // RSN协议,Robust Secure Network,强健安全网络,即通常所说的WPA2安全模式,是WPA的第二个版本 ├── tls // tls协议 ├── utils // 包括RFC1341编解码,通用的辅助函数,双链表,UUID,debug,epool └── wps // wps功能的实现

主要文件详解:

核心功能由wpa_supplicant.c实现,程序初始化和主控制回路由wpa_supplicant/main.c中的main()函数完成,适用于UNIX和Windows操作系统,通过命令参数配置wpa_supplicant。事件处理由events.c中的wpa_supplicant_event()函数负责。wpa_supplicant_i.h定义了wpa_supplicant的核心接口,不应包含在独立模块中。

wpa_supplicant使用通用的帮助函数,其中一些与hostapd共享,文件如下:

eloop.c和eloop.h实现事件循环(select()循环与注册超时,套接字读取回调,和信号回调);common.c和common.h提供公共功能;defs.h定义多个文件共享的定义;l2_packet.h,l2_packet_linux.c和l2_packet_pcap.c提供第2层(链路层)访问包装(包括本地Linux实现和libdnet/libpcap的包装)。当移植到不支持libdnet/libpcap的新操作系统时,需要添加新的l2_packet实现。Makefile可以选择包含哪个l2_packet实现,l2_packet_linux.c使用Linux数据包套接字,l2_packet_pcap.c使用libpcap和libdnet的简化版本。pcsc_funcs.c和pcsc_funcs.h封装PC/SC lite SIM和智能卡读卡器;priv_netlink.h是Linux内核头文件中netlink定义的私有版本,一旦合适的版本可用,可以用C库头文件替换;version.h定义版本号。

加密功能包括:

md5.c和md5.h实现MD5(如果包含TLS支持则用加密库替换),HMAC-MD5用于消息真实性验证的密钥校验和;rc4.c和rc4.h实现RC4(广播/默认密钥加密);sha1.c和sha1.h实现SHA-1(如果包含TLS支持则用加密库替换),HMAC-SHA-1用于消息真实性验证的密钥校验和,PRF-SHA-1用于伪随机(密钥/随机数生成)函数,PBKDF2-SHA-1用于ASCII共享密码,T-PRF用于EAP-FAST,TLS-PRF(RFC 2246);sha256.c和sha256.h实现SHA-256(如果包含TLS支持则用加密库替换);aes-wrap.c,aes_wrap.h和aes.c实现AES(如果包含TLS支持则用加密库替换),采用128位KEY的AES密钥包装算法RFC3394(广播/默认密钥加密),One-Key CBC MAC(OMAC1)哈希,AES-128,AES-128 CTR模式加密,AES-128 EAX模式加密/解密,AES-128 CBC;crypto.h定义加密库封装;crypto_openssl.c封装libcrypto的函数(OpenSSL);crypto_internal.c封装内部加密实现的函数;crypto_gnutls.c封装libgcrypt的函数(用于GnuTLS);ms_funcs.c和ms_funcs.h提供MSCHAPV2和LEAP参考函数;tls.h定义TLS库封装;tls_none.c在不包含TLS功能的情况下提供TLS库封装的虚拟实现;tls_openssl.c用于openssl的TLS库封装器;tls_internal.c用于内部TLS实现的TLS库;tls_gnutls.c用于GnuTLS的TLS库封装器;TLS库包括asn1.c和asn1.h实现ASN.1 DER解析,bignum.c和bignum.h实现大数数学,rsa.c和rsa.h实现RSA,x509v3.c和x509v3.h实现X.509v3证书解析和处理,tlsv1_client.c和tlsv1_client.h实现TLSv1客户端(RFC 2246),tlsv1_client_i.h定义TLSv1客户端内部结构,tlsv1_client_read.c实现TLSv1客户端读取握手消息,tlsv1_client_write.c实现TLSv1客户端写入握手消息,tlsv1_common.c和tlsv1_common.h提供常见的TLSv1例程和定义,tlsv1_cred.c和tlsv1_cred.h提供TLSv1证书,tlsv1_record.c和tlsv1_record.h提供TLSv1记录协议。

配置包括:

config_ssid.h定义每个网络配置项目的定义;config.h定义wpa_supplicant配置;config.c实现配置解析器和常用功能;wpa_supplicant/config_file.c实现配置文本文件的后端(例如:wpa_supplicant.conf);config_winreg.c实现Windows注册表的后端配置。

控制界面:

wpa_supplicant提供了一个控制界面,用于获取状态信息和管理来自外部程序的操作。一个命令行界面的示例(wpa_cli)和GUI(wpa_gui)的接口包含在wpa_supplicant分发中。

wpa_supplicant/ctrl_iface.c和wpa_supplicant/ctrl_iface.h实现控制界面的wpa_supplicant-side;ctrl_iface_unix.c实现基于UNIX域套接字的控制接口后端;ctrl_iface_udp.c实现基于UDP套接字的控制接口后端;ctrl_iface_named_pipe.c实现Windows基于管道的控制接口后端;wpa_ctrl.c和wpa_ctrl.h提供库函数,以便外部程序访问wpa_supplicant控制接口;wpa_cli.c提供使用wpa_supplicant控制界面的示例程序。

Grokipedia
Grokipedia

xAI推出的AI在线百科全书

下载

EAP peer:

EAP peer实现是一个独立的模块,可以被其他程序使用,而不仅仅是wpa_supplicant。

eap.c和eap.h实现EAP状态机和模式界面;eap_defs.h定义通用EAP定义;eap_i.h定义内部的EAP状态机和模式,不包含在其他模块中;eap_sim_common.c和eap_sim_common.h实现EAP-SIM和EAP-AKA通用代码;eap_tls_common.c和eap_tls_common.h实现EAP-PEAP,EAP-TTLS,和EAP-FAST通用代码;eap_ttls.c和eap_ttls.h实现EAP-TTLS;eap_pax.c,eap_pax_common.h和eap_pax_common.c实现EAP-PAX;eap_psk.c,eap_psk_common.h和eap_psk_common.c实现EAP-PSK(注意:这与WPA-PSK不同);eap_sake.c,eap_sake_common.h和eap_sake_common.c实现EAP-SAKE;eap_gpsk.c,eap_gpsk_common.h和eap_gpsk_common.c实现EAP-GPSK;eap_aka.c,eap_fast.c,eap_gtc.c,eap_leap.c,eap_md5.c,eap_mschapv2.c,eap_otp.c,eap_peap.c,eap_sim.c,eap_tls.c实现其他EAP模式。

EAPOL supplicant:

eapol_supp_sm.c和eapol_supp_sm.h实现EAPOL supplicant状态机和IEEE 802.1X处理。

Windows端口:

ndis_events.c接收NdisMIndicateStatus()事件的代码,并传递给wpa_supplicant;driver_ndis.c使用起来更加方便;win_if_list.c列出当前网络接口的外部程序。

测试程序:

radius_client.c,radius_client.h和radius_client.h实现无线电认证客户端;eapol_testradius.c和radius.h实现无线电消息处理,用于eapol_test;eapol_test.c实现独立的EPA测试工具并集成RADIUS认证客户端;preauth_test.c实现独立的RSN pre-authentication工具;wpa_passphrase.c实现WPA ASCII密码到PSK转换。

玩转「Wi-Fi」系列之wpa_supplicant 目录介绍(八)

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1135

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

213

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1893

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.19

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

599

2023.10.24

a和A对应的ASCII码数值
a和A对应的ASCII码数值

a的ascii码是65,a的ascii码是97;ascii码表中,一个字母的大小写数值相差32,一般知道大写字母的ascii码数值,其对应的小写字母的ascii码数值就算出来了,是大写字母的ascii码数值“+32”。想了解更多相关的内容,可阅读本专题下面的相关文章。

2151

2024.10.24

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

788

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1129

2023.07.27

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号