首页 > 代码库 > Hostapd初始化失败

Hostapd初始化失败

Hostapd

hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。

  1. 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里面读取。