Hostapd
hostapd 是一個用戶態用於AP和認證服務器的守護進程。它實現了IEEE 802.11相關的接入管理,IEEE 802.1X/WPA/WPA2/EAP 認證, RADIUS客戶端,EAP服務器和RADIUS 認證服務器。
- hostapd配置文件
interface=ath16
bridge=br0
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=dlink
dtim_period=2
max_num_sta=255
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wme_enabled=0
ieee8021x=0
eapol_version=2
eapol_key_index_workaround=0
wpa=3
wpa_group_rekey=3600
wpa_pairwise=TKIP CCMP
wpa_key_mgmt=WPA-PSK
wpa_passphrase=12345678//
wpa_strict_rekey=0
其中需要注意的配置選項:當密碼的長度小於64的時候,使用wpa_passphrase關鍵字,當密碼的長度為64的時候,使用wpa_psk關鍵字。
Wpa_supplicant的配置文件:
ap_scan=1
network={
ssid="dlink"
scan_ssid=1
key_mgmt=WPA-PSK
psk="12345678"
proto=WPA RSN
pairwise=CCMP TKIP
group=CCMP TKIP
}
其中需要注意的配置選項:當密碼的長度小於64的時候,使用psk=”123456”,當密碼長度為64的時候,使用psk=………………………….(64位);
2.hostapd使用時出錯
在項目中出現過station連接AP連接不上,有時候稍微等久一點時間,station又能夠連接上去了,最后發現問題在hostapd初始化的時候,函數:
int random_pool_ready(void)初始化hostapd的熵,初始化熵的時候,這個熵值是從/dev/random文件中讀取出來的,從打印的信息中發現了錯誤:
"WPA: Not enough entropy in random pool "
"for secure operations - update keys later when "
"the first station connects");
熵:其實就是一串隨機值。在hostapd中熵的值來源於/dev/random,系統打印出上面的錯誤,意思就是/dev/random里面讀取的隨機值不夠hostapd所需要的。Hostapd中只需要從/dev/random里面讀取20個字節就可以了,但是為什么會不夠呢?這里需要說說/dev/random與/dev/urandom的區別。
random設備的random pool是從基於中斷的IRQS里面取值,IRQS跟一些特殊的硬件綁定,基於這些硬件的interrupts將會提供給random設備。
/dev/urandom不受interrupts的限制,即使沒有足夠的interrupt它也能通過 random number generator產生足夠的輸出值。
說了兩者的區別以后就會發現一個很明顯的問題,就是random里面的值產生速度很慢,在hostapd起來的時候沒有足夠的值來做為熵的來源,而urandom產生的隨機值就非常的快,沒有什么限制,唯一區別:urandom比random更快速生成隨機數,但是隨機數的隨機性稍微差一些,有些可能相同。
最后通過補全的方式來解決這個問題,先從random里面讀取數據,如果發現不夠,再從urandom里面讀取。