1. 程式人生 > >使用wifi網絡卡筆記3---工具wpa_supplicant(STA模式)

使用wifi網絡卡筆記3---工具wpa_supplicant(STA模式)

1、  wpa_supplicant介紹

supplicant是懇求者的意思,是wpa的發起者,是傳送認證請求的裝置(手機),手機——AP——認證伺服器可用於上述4種"認證/加密"

2、wpa_supplicant應用程式的編譯與使用(閱讀README檔案)

(1) 先編譯它的依賴libopenssl
tar xzf openssl-1.0.1d.tar.gz

cd openssl-1.0.1d/

第一類是全域性性選項:

--openssldir=OPENSSLDIR
安裝目錄,預設是 /usr/local/ssl 。
--prefix=PREFIX
設定 lib include bin 目錄的字首,預設為 OPENSSLDIR 目錄。
--install_prefix=DESTDIR
設定安裝時以此目錄作為"根"目錄,通常用於打包,預設為空。
zlib
zlib-dynamic
no-zlib
使用靜態的zlib壓縮庫、使用動態的zlib壓縮庫、不使用zlib壓縮功能。
threads
no-threads
是否編譯支援多執行緒的庫。預設支援。
shared
no-shared
是否生成動態連線庫。
asm
no-asm
是否在編譯過程中使用匯編程式碼加快編譯過程。
//配置  shared是指生成動態連結庫,因為沒加此項前生成的都是靜態庫檔案。no-asm是指不使用裡面的彙編程式碼,裡面的彙編程式碼是給x86特別優化的./config shared no-asm --prefix=$PWD/tmp
修改Makefile:

CC= arm-linux-gcc(交叉編譯)
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
NM= arm-linux-nm
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


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

/work/nfs_root/fs_mini_mdev_new/lib




(2)要有一個配置檔案.config
tar xzf wpa_supplicant-2.0.tar.gz 
cd wpa_supplicant-2.0/wpa_supplicant/
cp defconfig .config
修改.config加上一行: CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc(使用交叉編譯)

//編譯

make(make log.txt 2>&1這句話是指編譯輸出的資訊會存入log.txt,錯誤的資訊也會存入第一個檔案(log.txt))

//指定安裝路徑(DESTDIR=$PWD/tmp指目的目錄等於當前目錄下的tmp

make DESTDIR=$PWD/tmp install

把生成的應用程式拷貝到網路檔案系統的bin目錄下面

cp tmp/usr/local/sbin/ work/nfs_root/fs_mini_mdev_new/bin/

啟動開發板 

3、使用:(檢視wpa_supplicant的README檔案

引數使用


這裡-p是直接建立相關的目錄,如目錄run本來是沒有的,但是要建立wap_supplicant,這樣會先建立run目錄,再在run目錄下建立wpa_supplicant

mkdir -p /var/run/wpa_supplicant

注意:配置檔案來源於/work/projects/wifi/wap_supplicant/wap_supplicant-2.0/wap_supplicant/examples裡的.config檔案,複製到網路檔案系統的/etc目錄下

① OPEN

//-B是指應用程式wpa_supplicant運行於後臺,-c是指定配置檔案, -i是指定網絡卡介面名

wpa_supplicant -B -c/etc/plaintext.conf -iwlan0

檢視網絡卡wlan0的狀態

wpa_cli -iwlan0 status // 檢視狀態

配置網絡卡IP

ifconfig wlan0 192.168.1.55

ping閘道器,若能ping通,表明配置網絡卡IP成功

ping 192.168.1.1


配置檔案/etc/plaintext.conf內容為:

ctrl_interface=/var/run/wpa_supplicant

//network表示連線哪個網路

network={

        ssid="dswei" //AP名

        key_mgmt=NONE//指認證的方法
}

killall wap_supplicant  killall用於殺死指定名字的程序(kill processes by name)。

ifconfig wlan0 down 關閉網絡卡0

② WEP/WEP
wpa_supplicant -B -c/etc/wep.conf  -iwlan0
wpa_cli -iwlan0 status  // 檢視狀態
ifconfig wlan0 192.168.1.55
ping 192.168.1.1


配置檔案/etc/wep.conf:

ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="dswei"
        key_mgmt=NONE //使用open或wep的認證方式
        wep_key0="baiwenwang123"  //密碼(5個字元或13個字元)
        wep_tx_keyidx=0 //表示使用哪一個密碼,現在使用第0個密碼
}

③WPA(TKIP)
wpa_supplicant -B -c/etc/wpa-psk-tkip.conf  -iwlan0
wpa_cli -iwlan0 status  // 檢視狀態
ifconfig wlan0 192.168.1.55
ping 192.168.1.1


配置檔案/etc/wpa-psk-tkip.conf
ctrl_interface=/var/run/wpa_supplicant  # 一個目錄,用於wpa_supplicant和wpa_cli的socket通訊,用作wap_cli檢視應用程式wpa_supplicant狀態
network={
        ssid="dswei"
        proto=WPA  # proto: list of accepted protocols, 可取WPA,RSN
                   # If not set, this defaults to: WPA RSN

        key_mgmt=WPA-PSK # 認證方式(PSK是指把密碼放在無線AP那裡)
                         # If not set, this defaults to: WPA-PSK WPA-EAP
        pairwise=TKIP    # If not set, this defaults to: CCMP TKIP
        group=TKIP       # If not set, this defaults to: CCMP TKIP WEP104 WEP40 
        psk="baiwenwang12"  #密碼
}


④ WPA2(AES) 

配置檔案來源:cp /etc/wpa-psk-tkip.conf  /etc/wpa_wpa2.conf

wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -iwlan0 status  // 檢視狀態
ifconfig wlan0 192.168.1.55
ping 192.168.1.1


配置檔案/etc/wpa_wpa2.conf
ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="dswei"
        psk="baiwenwang123"
}


另:

wpa_cli可工作於"命令模式"和"互動模式"

命令模式:wpa_cli -iwlan0 status 

                 wpa_cli -iwlan0 scan_results 檢視掃描的無線AP結果

互動模式:直接執行wpa_cli命令,可執行其他命令,輸入quit命令退出


⑤ 配置檔案/etc/wpa_wpa2.conf裡設定多個network:
ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="dswei"
        psk="baiwenwang123"
}
network={
        ssid="Programer"
        psk="baiwenwang"
}


⑥ 訪問外網:
man resolv.conf檢視格式修改/etc/resolv.conf(在伺服器上的)新增DNS:(DNS是域名伺服器,把網址)
nameserver 192.168.1.1


設定閘道器:
route add default gw 192.168.1.1