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

玩转「Wi-Fi」系列之wpa_supplicant 目录介绍(八)_第1张图片

之后的文章基本都是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.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 和sh1.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.c 和 asn1.hASN.1 DER解析
  • bignum.c 和 bignum.h Big number math
  • rsa.c 和 rsa.hrsa.h RSA
  • x509v3.c 和x509v3.hX.509v3证书解析和处理
  • tlsv1_client.c和tlsv1_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.c和tlsv1_cred.hTLSv1 证书
  • tlsv1_record.c和tlsv1_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.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控制界面的示例程序

EAP peer

  • EAP peer implementation是一个单独的模块,可以被其它程序使用,而不仅仅是wpa_supplicant
  • eap.c和eap.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.c和eap_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.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_test
  • radius.c和radius.h无线电消息处理为eapol_test
  • eapol_test.c独立的EPA测试工具并集成RADIUS认证客户端
  • preauth_test.c独立的RSN pre-authentication工具
  • wpa_passphrase.c WPA ASCII密码到PSK转换

你可能感兴趣的:([,工作积累,],玩转「Wi-Fi」系列教程)