使用wifi網絡卡筆記3---工具wpa_supplicant(STA模式)
1、 wpa_supplicant介紹
supplicant是懇求者的意思,是wpa的發起者,是傳送認證請求的裝置(手機),手機——AP——認證伺服器,可用於上述4種"認證/加密"
2、wpa_supplicant應用程式的編譯與使用(閱讀README檔案)
(1) 先編譯它的依賴libopenssltar 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 - 是否在編譯過程中使用匯編程式碼加快編譯過程。
修改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/WEPwpa_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 -iwlan0wpa_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