interface gtk makefile wrapper buffer methods html
原本覺得這個東西只有在Atheros的平臺上用的忽然發現Ralink的平臺也能夠用甚至還看到還有老美把這個東西往android上移植看來是個好東西學習一下 android
官方的模塊框圖sass
WPAPSK配置文件的寫法less
編譯方法函數
主要參數含義ui
源碼關鍵函數spa
通常來講不少模塊能夠根據須要選用的
EAP methods EAP state machine
若是你不須要支持wpa-enterprise那麼這兩個模塊都不須要編譯。
wpa_cli和GUI
這兩個能夠不要,直接寫個控制腳本,把用戶的參數變爲配置文件,重啓wpa_supplicant
driver event
driver event 無線驅動和本程序通信的接口,通常高級的無線驅動都支持WEXT。就是驅動裏面經過wireless_send_event把一些狀態信息發到本程序處理。
driver i/f
一些ioctl接口,一樣用於無線驅動和本程序之間傳遞信息。
EAPOL state machine
負責處理PTK 4-way HS和GTK 2-way HS
l2_package
EAPOL和pre auth都要經過這個接口收發包。
configuration
負責處理用戶配置文件的模塊
1 讀取配置文件
2 初始化配置參數,驅動函數wrapper
3 讓驅動scan當前全部bssid(包括wpa AP和non-wpa AP)
4 檢查掃描的參數是否和用戶設置的相符
5 若是相符,設置associate request ie 通知驅動進行auth assoc步驟
4 Four-way handshake for PTK
5 Two-way handshake for GTK
6 接收AP發出的指令,按期更換GTK
這個程序和madwifi通訊主要經過wirelessEXT,其實就是netlink,在madwifi驅動中會調用wireless_event_send這個函數把相關的東西發到wpa_supplicant
通常這樣寫能夠兼容WPA和WPA2 CCMP和TKIP
network={
ssid="myssid "
key_mgmt=WPA-PSK
proto=WPA RSN
pairwise=TKIP CCMP
psk="myasciipsk"
}
Makefile須要讀取一個.config文件,這個文件裏面包含交叉編譯路徑設置,模塊配置選項。
參考配置文件For wpapsk madwifi
#*******************************************************
CROSS_COMPILE=/opt/mips-linux-
CC=${CROSS_COMPILE}gcc
CONFIG_DRIVER_MADWIFI=y
CFLAGS += -I../src/802_11/madwifi/madwifi
CONFIG_DRIVER_WIRED=y
CONFIG_IEEE8021X_EAPOL=y
CONFIG_BACKEND=file
#*******************************************************
#建立無線interface模式設置爲managed
wlaconfig ath create wlandev wifi0 wlanmode sta
#設置ath0到自動模式,這樣scan的時候會掃全部的頻道2.4g 5g 11nagb。
iwpriv ath0 mode auto
#設置好配置文件,啓動wpa_supplicant
wpa_supplicant –i ath0 –b br0 –c /tmp/supplicant.conf -B
ath0是無線interface,經過這個參數,函數就能夠經過iotcl調用無線驅動中的接口。
br0 是bridge interface,EAPOL L2 package都經過這個接口收發。
-c 表示配置文件
-B daemonlise
wpa_supplicant_add_iface
wpa_supplicant_init_iface
wpa_supplicant_set_driver
wpa_config_read
wpa_supplicant_init_iface2
wpa_supplicant_init_eapol
wpa_drv_init
wpa_drv_set_param
wpa_supplicant_init_wpa
wpa_supplicant_driver_init
wpa_supplicant_req_scan // trigger scan state
wpa_supplicant_scan
wpa_supplicant_set_suites
wpa_sm_set_assoc_wpa_ie_default //add wpa rsn ie in associate req
有時候AP會被加到blackList中,主要緣由能夠參考下面的代碼。主要是收到deauth這個event和auth timeout
wpa_supplicant_event_disassoc
wpa_blacklist_add
wpa_supplicant_timeout
wpa_blacklist_add
什麼時候會從黑名單中刪除。
wpa_supplicant 掃描的結果是從madwifi中獲得的,因爲linux kernel裏面設置了掃描buffer的大小,wireless.h中定義這個大小爲#define IW_SCAN_MAX_DATA 4096,因此這個buffer很容易就溢出了,致使一些結果沒法傳送到wpa_supplicant,爲此madwifi在掃描的時候設置了一個過濾條 件,現提取wpa的AP,再提取none-wpa的,這樣改善了不少,可是一般在公司研發環境中仍是很容易出現溢出。