wpa_supplicant學習

interface  gtk  makefile  wrapper  buffer  methods html

目錄(?)[-] linux

  1. 原本覺得這個東西只有在Atheros的平臺上用的忽然發現Ralink的平臺也能夠用甚至還看到還有老美把這個東西往android上移植看來是個好東西學習一下 android

    1. 官方的模塊框圖sass



    1. 大體流程For WPAPSKapp

    2. WPAPSK配置文件的寫法less

    3. 編譯方法函數

    4. 啓動方法Atheros Driver學習

    5. 主要參數含義ui

    6. 源碼關鍵函數spa

 

原本覺得這個東西只有在Atheros的平臺上用的,忽然發現Ralink的平臺也能夠用,甚至還看到還有老美把這個東西往android上移植。看來是個好東西,學習一下。

官方的模塊框圖

 

 

通常來講不少模塊能夠根據須要選用的

EAP methods EAP state machine

若是你不須要支持wpa-enterprise那麼這兩個模塊都不須要編譯。

wpa_cliGUI

這兩個能夠不要,直接寫個控制腳本,把用戶的參數變爲配置文件,重啓wpa_supplicant

driver event

driver event 無線驅動和本程序通信的接口,通常高級的無線驅動都支持WEXT。就是驅動裏面經過wireless_send_event把一些狀態信息發到本程序處理。

driver i/f

一些ioctl接口,一樣用於無線驅動和本程序之間傳遞信息。

EAPOL state machine

負責處理PTK 4-way HSGTK 2-way HS

l2_package

EAPOLpre auth都要經過這個接口收發包。

configuration

負責處理用戶配置文件的模塊

大體流程(For WPAPSK)

1           讀取配置文件

2           初始化配置參數,驅動函數wrapper

3           讓驅動scan當前全部bssid(包括wpa APnon-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

 

WPAPSK配置文件的寫法

通常這樣寫能夠兼容WPAWPA2 CCMPTKIP

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

#*******************************************************

 

啓動方法(Atheros Driver)

#建立無線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 interfaceEAPOL 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這個eventauth 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的,這樣改善了不少,可是一般在公司研發環境中仍是很容易出現溢出。

相關文章
相關標籤/搜索