Ubuntu14.04系統hostapd編譯及使用
本文主要介紹在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的配置,則速率並不高。
李遲 2016.7.23 週六 中午