本文主要介绍在Ubuntu14.04系统环境中编译hostapd,以及其使用。

我的需求是在linux上创建WIFI热点,最早接触的是ap-hostapd这个脚本,然后参考网络文章安装hostapd以及dnsmasq。对于ap-hostpad的使用,网络已经有大量文章,笔者也就不再写了。不过由于hostapd版本关系,有些功能可能不支持,或者某些功能没有被编译。于是就得自己手动编译hostapd。本文由此而得。

一、编译安装

1、

hostapd官网为:http://w1.fi/,截至本文发表,最新版本是2.5。

2、

该软件依赖libnl库,在ubuntu14.04系统安装如下:

# apt-get install libnl-3-200

# apt-get install libnl-3-dev

# apt-get install libnl-genl-3-dev

3、

从官网下载hostapd源码压缩包并解压,进入hostapd目录,将自带的defconfig改名为.config并编辑,打开如下选项:

CONFIG_LIBNL32=y

CONFIG_IEEE80211N=y

CONFIG_IEEE80211AC=y

CONFIG_ACS=y   # 打开这个选项,才能使用自动选择信道(ACS,Automatic Channel Selection)

4、

输入make进行编译。

如果出现如下错误提示:

Package libnl-3.0 was not found in the pkg-config search path.

Perhaps you should add the directory containing `libnl-3.0.pc'

to the PKG_CONFIG_PATH environment variable

No package 'libnl-3.0' found

则需要将libnl-3.0.pc所在目录添加到PKG_CONFIG_PATH变量中,先用如下命令查看所在目录:

# find / -name "libnl-3.0.pc"

/usr/lib/i386-linux-gnu/pkgconfig/libnl-3.0.pc

然后添加到PKG_CONFIG_PATH变量,命令如下:

export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH

二、使用

hostapd使用十分简单,直接运行命令:

hostapd -B  ./hostapd.conf

-B表示以daemon形式运行,-f指定调试信息输出文件,可以使用-d或-dd输出更多调试信息。

值得说明的是,如果要实现完整的WIFI热点,除了此软件外,还得设置好无线网卡IP地址,一般而已该地址即为网关地址。而且还得具备DHCP功能,当然也可以不需要。如果没有DHCP,手机连接时就得指定IP地址。笔者就因为有一些试验时没有开启DHCP服务,用手机、PC怎么也连接不上WIFI,折腾了半天才发现问题所在。

——以上的各项设置,可以直接使用ap-hostapd或create_ap脚本来代替。后面笔者将就这两个著名的脚本进行解析而得到属于自己的一个脚本。

三、配置文件

网络上大部分关于hostapd.conf都只是将该文件内容复制出来,本文根据笔者使用经验做一些简单介绍,但不对配置文件可行性做保证。参数解释如下:

interface=wlan0 # 网络设备

max_num_sta=255 # 最大允许多少个客户连接

driver=nl80211 # 驱动,一般不用改

ssid=LATELEESWIFI_1B62BE # SSID,即WIFI名称

wpa_passphrase=12345678910 #密码

country_code=CN #国家码

hw_mode=g # 模式

beacon_int=100 #beacon帧间隔,单位为1.024 ms,默认为100,抓包可看到beacon帧为0.1024s

ignore_broadcast_ssid=0 #设置为1会隐藏SSID

ht_capab=[HT20] # HT特性 SHORT-GI-20 为短GI,速率会提升10%。HT40-表示向下绑定,HT40+表示向上绑定。SHORT-GI-40为短GI,40MHz频宽。

下面给出一个802.11n的示例:

beacon_int=100

interface=wlan0

driver=nl80211

ssid=LATELEEWIFI

channel=0

max_num_sta=2

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=12345678910

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP

rsn_pairwise=CCMP

country_code=CN

ieee80211d=1

ieee80211h=1

hw_mode=g

ieee80211n=1

ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

wmm_enabled=1

下面给出一个802.11ac的示例:

beacon_int=100

interface=wlan0

driver=nl80211

ssid=LATELEEWIFI

channel=0

max_num_sta=2

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=12345678910

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP

rsn_pairwise=CCMP

country_code=CN

ieee80211d=1

ieee80211h=1

hw_mode=a

ieee80211ac=1

wmm_enabled=1

ieee80211n=1

ht_capab=[HT40+][LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40]

#ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]


#ieee80211ac=1

#vht_oper_chwidth=1

#vht_capab=[MAX-MPDU-11454][RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP7][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN]

#vht_capab=[OFDM][BPSK][QPSK][16-QAM][64-QAM][256-QAM][LDPC][SHORT-GI-40]

vht_capab=[SHORT-GI-80]

注:理论上看802.11ac速率要比802.11n高,但实际上,如不在hostapd中添加ieee80211n的配置,则速率并不高。


作者:柒月