軟AP的實現------hostapd的編譯運行


        版權聲明:本文為博主原創文章,未經博主允許不得轉載。 http://www.cnblogs.com/ahcc08/p/8495286.html 

 

        最近要給攝像頭做一個軟ap,讓手機能夠連上這個熱點,從而能夠與攝像頭進行通信。

       1、什么是hostapd :

        hostapd能夠使得無線網卡切換為master模式,模擬AP(通常可以認為是路由器)功能,也就是我們說的軟AP(Soft AP)。 

        Hostapd的功能就是作為AP的認證服務器,負責控制管理stations(通常可以認為帶無線網卡的PC)的接入和認證。 

       通過Hostapd可以將無線網卡切換為AP/Master模式,通過修改配置文件,可以建立一個開放式的(不加密)的,WEP,WPA或WPA2的無線網絡。

       並且通過修改配置文件可以設置無線網卡的各種參數,包括頻率,信號,beacon包時間間隔,是否發送beacon包,如果響應探針請求等等。還可以設置mac地址過濾條件等。

       下面是無線網卡常見的工作模式及其作用。

        

       2、編譯移植

       基於RTL8188EUS無線網卡的驅動程序

       版本:wpa_supplicant_hostapd-0.8_rtw_r7475.20130812

       進入hostapd目錄,修改Makefile 找到如下語句:

ifndef CC
CC=gcc
endif

      刪除上面的語句,改成自己編譯服務器的gcc,然后make。

CROSS_COMPILE=arm-xxxx-linux-
CC=$(CROSS_COMPILE)gcc

    生成hostapd和hostapd_cli

    3、運行hostapd,創建軟AP

    vi /etc/hostapd.conf

   1)、創建不需要密碼的AP

ctrl_interface=/var/run/hostapd
interface=wlan0
driver=rtl871xdrv
ssid=Ap117081234000009
channel=8
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

  2)、創建wep加密類型的AP

ctrl_interface=/var/run/hostapd
interface=wlan0
driver=rtl871xdrv
ssid=Ap117081234000009
channel=8
macaddr_acl=0
auth_algs=2
ignore_broadcast_ssid=0
wep_key0=1234567891200
wep_default_key=0

3)、創建wpa psk加密類型的AP

ctrl_interface=/var/run/hostapd
interface=wlan0
driver=nl80211
ssid=Ap117081234000009
channel=1
macaddr_acl=0
auth_algs=1
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=123456789
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

   運行命令: ./hostapd -B /etc/hostapd.conf -dd

   

  電腦可以搜到這個wifi,但是連接不上                                   手機也可以搜到

                                     

連不上的原因是沒有dhcpserver為其分配IP。

關於dhcpserver的移植編譯見下章

這個版本使用的驅動是rtl871xdrv,不支持wpa_psk的加密類型,即使創建了wpa_psk的加密類型的AP,也是無法連接成功的。

重新下載了另一個版本wpa_supplicant_8_M_6.x_rtw_r17190.20160415,這個版本使用的nl80211驅動,是可以的。

不過編譯起來有點麻煩。

進入hostapd目錄,cp defconfig .config

修改Makefile

ifndef CC
CC=gcc
endif

將上面的刪除,改成

CROSS_COMPILE=arm-XXX-linux-
CFLAGS = -mcpu=arm926ej-s -mno-unaligned-access -fno-aggressive-loop-optimizations
LIBS+= -L../../project/Trunk/Libs/hiXXX/opensource/ -lssl -lcrypto -lnl
CC=$(CROSS_COMPILE)gcc -L../../project/Trunk/Libs/hiXXX/opensource/ -DCONFIG_WPS
CFLAGS+= -I../../common-headers/Trunk/libnl-1.1.4

然后make,報如下錯誤:

 undefined reference to symbol 'pthread_rwlock_rdlock@@GLIBC_2.4'

error adding symbols: DSO missing from command line

collect2: error: ld returned 1 exit status

在Makefile添加如下語句:

LDFLAGS +=-Wl,--gc-sections -Wall -lpthread -lc  -ldl 

※這個版本的hostapd需要依賴libopenssl.a和libnl.a開源庫

我是把用到的開源庫放到了../../project/Trunk/Libs/hiXXX/opensource目錄里的

這樣make生成的hostapd是支持wpa_psk加密類型的。

把hostapd開源庫編譯成靜態鏈接庫,可以給其他項目進行調用
方法如下:
修改Makefile
添加

AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib

把 ALL=libhostapd libhostapd_cli
改成ALL=libhostapd.a libhostapd_cli.a

hostapd_cli: $(OBJS_c)
$(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
@$(E) " LD " $@

下面添加:

libhostapd.a: .config $(OBJS)
$(AR) -r $@ $(OBJS)
$(RANLIB) $@
libhostapd_cli.a: $(OBJS_c)
$(AR) -r $@ $(OBJS_c)
$(RANLIB) $@

 

hostapd.conf的字段說明

macaddr_acl     #可選,指定MAC地址過濾規則,

        0表示除非在禁止列表否則允許,

        1表示除非在允許列表否則禁止,

        2表示使用外部RADIUS服務器;

accept_mac_file:指定允許MAC列表文件所在;

deny_mac_file:指定禁止MAC列表文件所在

auth_algs:指定采用哪種認證算法。

             采用位域(bit fields)方式來制定,其中第一位表示開放系統認證(Open System Authentication, OSA),

             第二位表示共享密鑰認證(Shared Key Authentication, SKA)。

             這里設置alth_algs的值為1,表示只采用OSA;如果為3則兩種認證方式都支持。

             對於WPA或WPA2,此值必須設為1

#指定802.11協議,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g

hw_mode:指定802.11協議,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g;

ignore_broadcast_ssid:

  # 是否廣播,0 廣播SSID,1 不廣播SSID(發送空SSID,即長度為0的SSID),
  # 2 忽略廣播 SSID 的探測請求,跟1類似,但是兼容某些不支持空SSID的設備

wpa:指定WPA類型,這是一個位域值(bit fields),

  第一位表示啟用WPA。     1:支持wpa

  第二位表示啟用WPA2。    2:支持wpa2     3:兩者都支持

WPA 是 4 次握手協商單播密鑰+2 次握手協商組播密鑰,推出時支持的加密算法 TKIP;

WPA2 使用 4 次握手同時協商單播和組播密鑰,配套的加密算法是 CCMP

wpa_passphrase:WPA/WPA2加密需要指定密鑰,這個選項就是配置WPA/WPA2的密鑰。

         注意wpa_passphrase要求8~63個字符。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM