首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >玩转「Wi-Fi」系列之wpa_supplicant 目录介绍(八)

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

作者头像
程序手艺人
发布2019-02-21 17:57:50
发布2019-02-21 17:57:50
5.1K0
举报
文章被收录于专栏:程序手艺人程序手艺人

之后的文章基本都是wpa_supplicant源码分析的介绍, 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 // ieeee802 协议 ├── 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.celoop.h 事件循环(select()循环与注册超时,套接字读取回调,和信号回调)
  • common.ccommon.h 公共功能
  • defs.h 定义由多个文件共享
  • l2_packet.h,l2_packet_linux.cl2_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.cmd5.h MD5(如果包含TLS的支持则用加密库替换)HMAC-MD5(用于消息真实性验证的密钥校验和)
  • rc4.c和rc4.h RC4(广播/默认密钥加密)
  • sha1.csh1.h SHA-1(如果包含TLS的支持则用加密库替换) HMAC-SHA-1(用于消息真实性验证的密钥校验和) PRF-SHA-1(伪随机(密钥/随机数生成)函数) PBKDF2-SHA-1(ASCII共享密码)T-PRF (for 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.clibcrypto的封装函数 (OpenSSL)
  • crypto_internal.c 内部加密实现的封装函数
  • crypto_gnutls.c libgcrypt的封装函数(used by 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.casn1.hASN.1 DER解析
  • bignum.c bignum.h Big number math
  • rsa.crsa.hrsa.h RSA
  • x509v3.c x509v3.hX.509v3证书解析和处理
  • tlsv1_client.ctlsv1_client.hTLSv1客户端(RFC 2246)
  • tlsv1_client_i.h TLSv1客户端内部结构
  • tlsv1_client_read.cTLSv1 client:读取握手消息
  • tlsv1_client_write.c TLSv1 client:写握手消息
  • tlsv1_common.c tlsv1_common.h常见的TLSv1例程和定义
  • tlsv1_cred.ctlsv1_cred.hTLSv1 证书
  • tlsv1_record.ctlsv1_record.hTLSv1记录协议

配置

  • 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.cwpa_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.cwpa_ctrl.h库函数为外部程序提供对wpa_supplicant控制接口的访问
  • wpa_cli.c 使用wpa_supplicant控制界面的示例程序

EAP peer

  • EAP peer implementation是一个单独的模块,可以被其它程序使用,而不仅仅是wpa_supplicant
  • eap.ceap.hEAP状态机和模式界面
  • eap_defs.h 通用EAP定义
  • eap_i.h内部定义的EAP状态机和模式,不包含在其他模块中
  • eap_sim_common.c eap_sim_common.hEAP-SIM and EAP-AKA通用代码
  • eap_tls_common.c eap_tls_common.h EAP-PEAP, EAP-TTLS, and EAP-FAST通用代码
  • eap_ttls.ceap_ttls.hEAP-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 (note: this is not needed for 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.ceapol_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_test
  • radius.cradius.h无线电消息处理为eapol_test
  • eapol_test.c独立的EPA测试工具并集成RADIUS认证客户端
  • preauth_test.c独立的RSN pre-authentication工具
  • wpa_passphrase.c WPA ASCII密码到PSK转换
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年12月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心功能
  • 通用功能
  • 加密功能
  • TLS 库
  • 配置
  • 控制界面
  • EAP peer
  • EAPOL supplicant
  • Windows 端口
  • 测试程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档