當前位置:
首頁 > 最新 > 玩轉「Wi-Fi」系列之wpa

玩轉「Wi-Fi」系列之wpa

之後的文章基本都是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消息處理

├── rsn_supp // RSN協議,通常的WPA2安全模式

├── tls // tls 協議

├── utils // 包括 RFC1341編解碼, 輔助函數

└── wps // wps 功能的實現

主要文件詳解

1

核心功能

wpa_supplicant.c

程序初始化,主控制迴路

wpa_supplicant/main.c main()

適用於UNIX和Windows操作系統,使用命令參數來配置wpa_supplicant

events.c

驅動事件處理 wpa_supplicant_event() 相關功能

wpa_supplicant_i.h

wpa_supplicant 核心介面定義,不應該包含在獨立模塊中

2

通用功能

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

版本號定義

3

加密功能

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.c

libcrypto的封裝函數 (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庫封裝器

4

TLS 庫

asn1.c 和 asn1.h

ASN.1 DER解析

bignum.c 和 bignum.h

Big number math

rsa.c 和 rsa.h

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 client:讀取握手消息

tlsv1_client_write.c

TLSv1 client:寫握手消息

tlsv1_common.c, tlsv1_common.h

常見的TLSv1常式和定義

tlsv1_cred.c,tlsv1_cred.h

TLSv1 證書

tlsv1_record.c,tlsv1_record.h

TLSv1 記錄協議

5

配置

config_ssid.h

每個網路配置項目的定義

config.h

wpa_supplicant配置的定義

config.c

配置解析器和常用功能

config_file.c

配置文本文件的後端(例如:wpa_supplicant.conf)

config_winreg.c

Windows註冊表的後端配置

6

控制界面

wpa_supplicant有一個控制界面可以用來獲取狀態信息和管理來自外部程序的操作。一個命令行界面的例子(wpa_cli)和GUI(wpa_gui)的介面包含在wpa_supplicant分發中

ctrl_iface.c,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控制界面的示常式序

7

EAP peer

EAP peer implementation是一個單獨的模塊,可以被其它程序使用,而不僅僅是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 and EAP-AKA通用代碼

eap_tls_common.c ,eap_tls_common.h

EAP-PEAP, EAP-TTLS, and 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 (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模式實現

8

EAPOL supplicant

eapol_supp_sm.c,eapol_supp_sm.h

EAPOL supplicant 狀態機和 IEEE 802.1X處理

9

Windows 埠

ndis_events.c

接收NdisMIndicateStatus()事件的代碼,傳遞它們給 wpa_supplicant driver_ndis.c,使用起來更加方便

win_if_list.c

列出當前網路介面的外部程序

10

測試程序

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轉換


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

為什麼人家的校服那麼好看?看看英國的校服文化吧
因為相欠、所以遇見

TAG:全球大搜羅 |