1. 程式人生 > >Linux中USB無線網絡卡實現AP模式(hostapd交叉編譯環境下)

Linux中USB無線網絡卡實現AP模式(hostapd交叉編譯環境下)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

用手機APP來實現無線監控已經成功了,接下來準備講解andriod相關的知識和客戶端APP源程式


以手機上WIFI熱點為例,有4種常用的"認證/加密"
a. open
b. WEP
c. WPA(TKIP)
d. WPA2(AES)


需要用到的原始碼有:

hostapd-2.0.tar.gz,下載地址:點選這裡!

openssl-1.0.1d.tar.gz,下載地址:點選這裡!

dhcp-4.2.5-P1.tar.gz,下載地址:點選這裡!


首先交叉編譯dhcp-4.2.5-P1.tar.gz

tar xzf dhcp-4.2.5-P1.tar.gz
cd dhcp-4.2.5-P1
/configure --host=arm-linux ac_cv_file__dev_random=yes

cd bind
修改Makefile:
./configure BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux --disable-kqueue   /* 新增到./configure這行 */

tar xzf bind.tar.gz
cd bind-9.8.4-P2
修改 lib/export/dns/Makefile.in 
gen: ${srcdir}/gen.c
        ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o

[email protected] ${srcdir}/gen.c ${LIBS}
改為
gen: ${srcdir}/gen.c
        ${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o [email protected] ${srcdir}/gen.c ${LIBS}

cd ../..
make DESTDIR=$PWD/tmp install

把生成tmp/usr/local/sbin目錄下的dhcpd命令複製到根檔案系統的bin目錄,把tmp/usr/local/etc目錄下的dhcpd.conf.example複製到根檔案系統/etc目錄下面,以後用得到(自動獲取IP地址)


交叉編譯openssl-1.0.1d.tar.gz

tar xzf openssl-1.0.1d.tar.gz
cd openssl-1.0.1d/
./config shared no-asm --prefix=$PWD/tmp
修改Makefile:
CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
MAKEDEPPROG= arm-linux-gcc

make
make install

把編譯出來的標頭檔案應該放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把編譯出來的庫檔案應該放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把編譯出來的庫檔案應該放入根檔案系統檔案系統的lib目錄:*so*


交叉編譯hostapd-2.0.tar.gz

tar xzf hostapd-2.0.tar.gz
cd hostapd-2.0/
cd hostapd/
cp defconfig .config
修改.config, 加一行: CONFIG_LIBNL32=y
修改Makefile:

CC=arm-linux-gcc      /* 去掉前面的巨集定義 */
make
make DESTDIR=$PWD/tmp install

把生成的hostapd  hostapd_cli複製到根檔案系統的bin目錄


啟動開發板:vi /etc/hostapd.conf   內容如下:

ctrl_interface=/var/run/hostapd           
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=Linux                /* 名字 */
channel=1

# 認證/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=linuxdrv     /* 密碼*/
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP


hostapd: hostapd -B /etc/hostapd.conf        /* 啟動AP模式,手機連線時候一直停在獲取IP,需要配置dhcp */


修改配置檔案/etc/dhcpd.conf,新增:
subnet 172.16.1.0 netmask 255.255.255.0 {                       
  range 172.16.1.10 172.16.1.100;                                                      
  option routers 172.16.1.1;                       /* 開發板IP地址 */                               
}    


建立空檔案/var/db/dhcpd.leases:
mkdit    /var/db/

touch dhcpd.leases

dhcpd -cf /etc/dhcpd.conf wlan0              /* 啟動自動獲取IP */


在/etc/init.d/rcS目錄下新增下面幾條命令:/* 下面的命令折騰了很久才配置出來的 */

ifconfig wlan0 up                        

ifconfig wlan0 172.16.1.1  netmask 255.255.255.0
route add default gw 172.16.1.1                /* 這兩條路由命令需要新增 */
route add default gw 172.16.148.111
echo 1 > /proc/sys/net/ipv4/ip_forward         /* 開啟IP轉發 */
dhcpd -cf /etc/dhcpd.conf wlan0  &              
hostapd -B /etc/hostapd.conf



下面是轉載的:

1、從官網上下載hostapd,編譯之前先在hostapd目錄下執行cp defconfig .config,配置檔案預設只支援nl80211的驅動(CONFIG_DRIVER_NL80211=y)。

make

make install

3、新建/etc/hostapd/hostapd.conf 

interface=wlan0
#interface=wlan0
driver=nl80211
#driver=madwifi
ssid=YOUR_SSID
channel=9
hw_mode=g
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=YOUR_PASSPHRASE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

最後執行:hostapd -d /etc/hostapd/hostapd.conf 

hostapd.conf檔案(也可以從這裡獲得),這個檔案很大,裡面的配置項相當的多,從簡單到高階。但一般地我們能夠使用到的功能只是其中很少的一部分,下面介紹一下我認為最常用的一些配置選項。首先介紹一些基本的配置項:

複製程式碼

   
    ssid=testhw_mode=gchannel=10interface=wlan0bridge=br0driver=nl80211ignore_broadcast_ssid=0macaddr_acl=0accept_mac_file=/etc/hostapd.acceptdeny_mac_file=/etc/hostapd.deny
   
   
    複製程式碼
   
  
  

上面列出的配置基本上是必須的,其中:

  • ssid:別人所看到的我們這個無線接入點的名稱;
  • hw_mode:指定802.11協議,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g;
  • channel:設定無線頻道;
  • interface:接入點裝置名稱,注意不要包含ap字尾,即如果該裝置稱為wlan0ap,填寫wlan0即可;
  • bridge:指定所處網橋,對於一個同時接入公網、提供內部網和無線接入的路由器來說,設定網橋很有必要;
  • driver:設定無線驅動,我這裡是nl80211;
  • macaddr_acl:可選,指定MAC地址過濾規則,0表示除非在禁止列表否則允許,1表示除非在允許列表否則禁止,2表示使用外部RADIUS伺服器;
  • accept_mac_file:指定允許MAC列表檔案所在;
  • deny_mac_file:指定禁止MAC列表檔案所在;
下面介紹關於認證方式的配置:

   
    auth_algs=1
   
  
  

其中auth_algs指定採用哪種認證演算法,採用位域(bit fields)方式來制定,其中第一位表示開放系統認證(Open System Authentication, OSA),第二位表示共享金鑰認證(Shared Key Authentication, SKA)。我這裡設定alth_algs的值為1,表示只採用OSA;如果為3則兩種認證方式都支援。不過很奇怪的是,在我工作中如果配置了3,不管採用WEP/WPA/WP2加密的方式都從沒連線成功過,配置為2也是如此。所以在我的配置當中,如果採用認證,則設定auth_algs為1;否則把這行程式碼註釋掉(在前面加#)。

由於RADIUS認證需要提供外部RADIUS伺服器,我們沒有這個功能,因此我只研究了WEP、WPA和WPA2這三種加密方式。

複製程式碼

   
    #wep_default_key=0#wep_key0=1234567890#wep_key1="vwxyz"#wep_key2=0102030405060708090a0b0c0d#wep_key3=".2.4.6.8.0.23"#wep_key_len_broadcast=13#wep_key_len_unicast=13#wep_rekey_period=300
   
   
    複製程式碼
   
  
  

如果要啟用WEP加密,只需配置wep_default_key和其中一個wep_keyx,其中x的值只能在0~3之間,wep_default_key的值必須啟用了。注意wep_keyx的值不是任意的,只能是5、13或16個字元(用雙引號括住),或者是10、26或32個16進位制數字。由於WEP加密演算法已經被破解了,所以通常不啟用它,全部註釋掉。


   
    wpa=2wpa_passphrase=12345678wpa_key_mgmt=WPA-PSK#wpa_pairwise=TKIP CCMPrsn_pairwise=TKIP CCMP
   
  
  

現在推薦的加密方式是WPA/WPA2,由於時間緊迫,我沒有怎麼去了解過這兩者的差別。不過配置是很簡單的:

  • wpa:指定WPA型別,這是一個位域值(bit fields),第一位表示啟用WPA,第二位表示啟用WPA2。在我的配置中,無論設定成1、2或3,都可以正常連線;
  • wpa_passphrase:WPA/WPA2加密需要指定金鑰,這個選項就是配置WPA/WPA2的金鑰。注意wpa_passphrase要求8~63個字元。另外還可以通過配置wpa_psk來制定金鑰,不過要設定一個256位的16進位制金鑰,不適合我們的需求;
  • wpa_pairwise/rsn_pairwise:如果啟用了WPA,需要指定wpa_pairwise;如果啟用了WPA2,需要指定rsn_pairwise,或者採用wpa_pairwise的設定。都可以設定成TKIP、CCMP或者兩者都有,具體含義我也沒仔細弄清楚。一篇比較老的文章說TKIP不相容Windows Mobile,但我的Windows Mobile 6.5在這兩種演算法下都沒有遇到任何問題。

經過這樣一些配置,啟動hostapd之後應該就可以按照自己的需求正常使用無線接入點功能了:


   
    /usr/bin/hostapd -f /etc/hostapd.conf
   
  
  

4、安裝dhcpd

apt-get install dhcp3-server

echo "1" > /proc/sys/net/ipv4/ip_forwardhostapd -B /etc/hostapd/hostapd.conf/etc/dhcp/dhcpd.conf:subnet 192.168.0.0 netmask 255.255.255.0{ range 192.168.0.2 192.168.0.10; option routers 192.168.0.1;}wlan0配置地址:ifconfig wlan0 192.168.0.1 netmask 255.255.255.0開啟dhcp:dhcpd wlan0 -pf /var/run/dhcp-server/dhcpd.pid

現在無線網絡卡就可以當成ap了。


5、把無線網絡卡的ap繼續擴充套件為連線到外網

網上有很多資料,一般有2種方法:一種是bridge(橋接),另一種是nat方式,這裡只介紹nat的方式。

經過前面4個步驟,無線網絡卡已經可以自動分配IP,現在只需要把無線網絡卡的資料都經過eth0(有線網路)發到外網去,這就需要IP轉發了。

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

還需要修改/etc/dhcp/dhcpd.conf,新增dns:subnet 192.168.0.0 netmask 255.255.255.0{ range 192.168.0.2 192.168.0.10;
 option domain-name-servers 221.5.88.88; option routers 192.168.0.1;}

(Linux系統預設並沒有開啟IP轉發功能,要確認IP轉發功能的狀態,可以檢視/proc檔案系統,使用下面命令: cat /proc/sys/net/ipv4/ip_forward
如果上述檔案中的值為0,說明禁止進行IP轉發;如果是1,則說明IP轉發功能已經開啟。
要想開啟IP轉發功能,可以直接修改上述檔案: echo 1 > /proc/sys/net/ipv4/ip_forward
把檔案的內容由0修改為1。禁用IP轉發則把1改為0。
上面的命令並沒有儲存對IP轉發配置的更改,下次系統啟動時仍會使用原來的值,要想永久修改IP轉發,需要修改/etc/sysctl.conf檔案,修 改下面一行的值: net.ipv4.ip_forward = 1 修改後可以重啟系統來使修改生效,也可以執行下面的命令來使修改生效: sysctl -p /etc/sysctl.conf 進行了上面的配置後,IP轉發功能就永久使能了。)


6、嵌入式開發板上設定核心支援iptabel的設定如下:

核心需要對iptables的支援並加上nat功能

Networking support --->

              Networking options --->

                   Network packet filtering framework (Netfilter)

│ │    --- Network packet filtering framework (Netfilter)               │ │ 

  │ │    [*]   Network packet filtering debugging                         │ │ 

  │ │    [*]   Advanced netfilter configuration                           │ │ 

  │ │          Core Netfilter Configuration  --->                         │ │ 

  │ │    < >   IP virtual server support  --->                            │ │ 

  │ │          IP: Netfilter Configuration  --->

 

Core Netfilter Configuration裡面的配置如下:

<*> Netfilter connection tracking support

-*- Netfilter Xtables support (required for ip_tables)

IP: Netfilter Configuration裡面的配置如下:

[*]   proc/sysctl compatibility with old connection tracking

<*> IP tables support (required for filtering/masq/NAT)

   <*>   Packet filtering           

   <*>     REJECT target support      

   < >   LOG target support  

   < >   ULOG target support     

  <*>   Full NAT      

  <*>     MASQUERADE target support 

  <*>     NETMAP target support    

  <*>     REDIRECT target support

  <*>     Basic SNMP-ALG support



           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述