WIFI wpa_supplicant的移植和使用(3)
2. 使用WIFI網路卡: iw, wpa_supplicant,dhcp
2.1 概念: 認證/加密
無線加密的多種方法及其區別(WEP WPA TKIP EAP)
http://wenku.baidu.com/link?url=DlLntlD490hAeIIbE-CO4QfAzgUC-gOTA7FCwS_XanOJMFzkyhQrFIB38ULKCcQIVFyDqqSWNWyq5kVtYAoJKjjf9pmZLu17-hVQ922WeaG
以手機上WIFI熱點為例,有4種常用的"認證/加密"
a. open
b. WEP
c. WPA(TKIP)
d. WPA2(AES)
2.2 編譯、使用iw,wpa_supplicant,dhcp
a. 舊工具iwconfig, iw是它的替代者, 可用於這2種"認證/加密": open, WEP
a.1
tar xzf libnl-3.2.23.tar.gz
cd libnl-3.2.23/
./configure --host=arm-linux --prefix=$PWD/tmp
修改 lib/addr.c 新增巨集(巨集來自核心原始碼)
make
make install
把編譯出來的標頭檔案應該放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd tmp/include/libnl3
sudo cp netlink -rf /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
a.2
tar xjf iw-3.11.tar.bz2
cd iw-3.11/
修改Makefile:
CC = "arm-linux-gcc"
NL3xFOUND := Y
#LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME))
#CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME))
在info.c的程式碼前面新增
#define htole16(X) (((((uint16_t)(X)) << 8) | ((uint16_t)(X) >> 8)) & 0xffff)
使用:
iw list // 列出WIFI網路卡的效能
ifconfig wlan0 up
iw dev wlan0 scan // 掃描WIFI AP
iw wlan0 connect dswei // 連線到WIFI AP:dswei (open)
iw wlan0 connect dswei keys d:0:baiwenwang123 // 連線到WIFI AP:dswei (WEP)
d: default, 0: 第0個密碼
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
iw wlan0 disconnect
b. wpa_supplicant : 可用於上述4種"認證/加密"
b.1 先編譯它的依賴libopenssl
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
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
b.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 DESTDIR=$PWD/tmp install
使用:
mkdir -p /var/run/wpa_supplicant
① OPEN
wpa_supplicant -B -c/etc/plaintext.conf -iwlan0
wpa_cli -iwlan0 status // 檢視狀態
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
配置檔案內容為:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="dswei"
key_mgmt=NONE
}
② 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
配置檔案:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="dswei"
key_mgmt=NONE
wep_key0="baiwenwang123"
wep_tx_keyidx=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
配置檔案
ctrl_interface=/var/run/wpa_supplicant # 一個目錄,用於wpa_supplicant和wpa_cli的socket通訊
network={
ssid="dswei"
proto=WPA # proto: list of accepted protocols, 可取WPA,RSN
# If not set, this defaults to: WPA RSN
key_mgmt=WPA-PSK # 認證方式
# 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)
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -iwlan0 status // 檢視狀態
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
配置檔案:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="dswei"
psk="baiwenwang123"
}
另:
wpa_cli可工作於"命令模式"和"互動模式"
⑤ 配置檔案裡設定多個network:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="dswei"
psk="baiwenwang123"
}
network={
ssid="Programer"
psk="baiwenwang"
}
⑥ 訪問外網:
修改/etc/resolv.conf新增DNS:
nameserver 192.168.1.1
設定閘道器:
route add default gw 192.168.1.1
c. dhcp : 使得WIFI網路卡動態獲取IP
c.1 編譯、安裝
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
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 $@ ${srcdir}/gen.c ${LIBS}
改為
gen: ${srcdir}/gen.c
${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
cd ../..
make DESTDIR=$PWD/tmp install
把檔案複製到NFS
sudo cp bin/* /work/nfs_root/fs_mini_mdev_new/bin/
sudo cp sbin/* /work/nfs_root/fs_mini_mdev_new/sbin/
sudo cp etc/dhclient.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhclient.conf
sudo cp etc/dhcpd.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhcpd.conf
sudo cp client/scripts/linux /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
chmod +x /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
並修改
#!/bin/bash
改為
#!/bin/sh
c.2 使用:
mkdir -p /var/db
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
dhclient wlan0
c.2 一接入WIFI網路卡,就自動執行wpa_supplicant等
參考第2期視訊第28課熱拔插
cat /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi.sh
cat /sbin/auto_wifi.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -a/sbin/wpa_action.sh -B
else
killall wpa_supplicant
killall wpa_cli
killall dhclient
fi
chmod +x /sbin/auto_wifi.sh
一連線上WIFI AP, 就自動執行dhclient
建立一指令碼:
cat /sbin/wpa_action.sh
#!/bin/sh
IFNAME=$1
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
echo connect $IFNAME, dhclient for it > /dev/console
dhclient $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
echo disconnect $IFNAME, kill dhclient for it > /dev/console
killall dhclient
fi
chmod +x /sbin/wpa_action.sh
wpa_cli -a/sbin/wpa_action.sh -B
3. 使用WIFI網路卡的AP功能
參考: 移植hostapd,搭建無線熱點 - 積水成淵 - 部落格頻道 - CSDN.NET.htm
http://blog.csdn.net/daydring/article/details/16337047
3.1 下載原始碼: http://w1.fi/hostapd/
3.2 編譯、安裝
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複製到NFS的bin目錄
3.3 使用
a. hostapd的配置檔案: WPA/WPA2
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1
# 認證/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=baiwenwang
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
把配置檔案存為/etc/myhostapd.conf
啟動 hostapd: hostapd -B /etc/myhostapd.conf
b. 啟動 dhcpd
修改配置檔案/etc/dhcpd.conf,新增:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
}
建立空檔案/var/db/dhcpd.leases:
> /var/db/dhcpd.leases
ifconfig wlan0 192.168.1.1
dhcpd -cf /etc/dhcpd.conf wlan0
3.4 OPEN方式的配置檔案
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1
# 認證/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
3.5 WEP方式的配置檔案
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1
# 認證/加密方式
macaddr_acl=0
auth_algs=2
ignore_broadcast_ssid=0
wep_key0="baiwenwang123"
wep_default_key=0
3.6 修改/etc/mdev.conf自動啟動AP模式
cat /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi_ap.sh
cat /sbin/auto_wifi_ap.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
hostapd -B /etc/myhostapd.conf
ifconfig wlan0 192.168.1.1
dhcpd -cf /etc/dhcpd.conf wlan0
else
killall hostapd
killall dhcpd
fi
注意事項:
對於包含了AR9271網路卡驅動的核心,有一個問題:
在上電之前就接上了網路卡,那麼系統啟動後無法識別出這個網路卡。
解決方法:
1.上電後再接網路卡
2.把驅動編譯為模組,當系統啟動後再insmod: 可以在上電之前就接網路卡
可能原因:ath9k_htc.ko要用到韌體, 但是韌體要到根檔案系統被掛載後才能訪問
4. 仿手機寫一個WIFI操作程式
有這幾個功能:
a. 自動掃描WIFI熱點
b. 點選某個WIFI熱點後會去連線它, 必要時讓你輸入密碼
c. 曾經連線過的WIFI熱點會保留它的密碼等資訊, 以後會自動連線
wpa_supplicant <===== wpa_cli
依照wpa_cli, 給wpa_supplicant發各種命令, 比如:
scan
add_network, set_network, select_network
save_config
核心:wpa_cli 通過 wpa_request 向 wpa_supplicant 發出命令,並得到結果
相關文章
- 全志H3_wifi模組移植說明文件V-SDK軟體資料WiFi
- Linux 中 WIFI 和熱點的使用LinuxWiFi
- 移植到 Python 3Python
- WPA_SUPPLICANT的LOG列印資訊分析與調整
- Android Studio 使用WiFi除錯(支援AS 2 3以上)AndroidWiFi除錯
- 開源繪畫應用 Pinta 已移植到GTK 3和.NET 6
- Linux系統Wpa_supplicant用法小結Linux
- 使用 SSH 移植 Conda 環境
- 全志R16 android4平臺移植wifi資料下載AndroidWiFi
- 探索將scratch3移植到樹莓派樹莓派
- 嵌入式linux wpa_supplicant自動配置程式Linux
- 免費WiFi的前世、今生和未來WiFi
- RK3399 rk3288 RK3326 wIFi驅動移植說明WiFi
- 主機板帶wifi和不帶wifi區別 主機板帶wifi好還是不帶wifi好WiFi
- Arduino uno r3 使用 ESP8266 UART-WiFi 透傳模組UIWiFi
- Onvif開發之Linux下gsoap的使用及移植Linux
- 如何移植使用W5500官方提供的最新Socket庫
- 小米WiFi繫結WiFi教程 小米WiFi鏈怎麼繫結我的WiFi ?WiFi
- 樹莓派3B的WiFi中文亂碼及搜尋不到附近的WiFi_解決方案:樹莓派WiFi
- uboot1: 啟動流程和移植框架boot框架
- 無線WiFi設定和使用遇到問題及注意事項WiFi
- python基礎 (3)if 和 while的使用PythonWhile
- 基於校園一卡通和WIFI使用記錄的資料分析和視覺化WiFi視覺化
- 全新的WiFi Explorer Pro 3已推出,與之前的WiFi Explorer有何區別?有哪些改進?WiFi
- 小米隨身wifi怎樣使用WiFi
- WiFi WPA3標準中發現新的Dragonblood漏洞WiFiGo
- AIX 使用migratepv移植lv,系統做mirrorAI
- 無線網路wifi和wlan有什麼區別?無線網路wifi和wlan的區別詳解WiFi
- uClinux 在 S3C4510B 嵌入式開發板上的移植和開發詳解LinuxS3
- 【esp32 專案】使用esp32的wifiWiFi
- Java 的可移植性 (轉)Java
- BPF的可移植性和CO-RE (Compile Once – Run Everywhere)Compile
- WIFI 國家碼和通道劃分WiFi
- 用rfkill命令管理藍芽和wifi藍芽WiFi
- uboot和系統移植擴充套件--主Makefile分析boot套件
- jsoncpp linux平臺編譯和arm移植JSONLinux編譯
- HTC Vive和Oculus Rift沒區別 遊戲可移植遊戲
- ZT 升級和移植Oracle資料庫方法若干Oracle資料庫