Linux 使用wpa_supplicant手動配置連接wifi


Linux 使用wpa_supplicant手動配置連接wifi

wpa_supplicant

簡介

wpa_supplicant是Linux BSD, Mac OSX和Windows的WPA的服務,支持WPA和WPA2(IEEE 802.11i/RSN),它適用於台式機/筆記本和嵌入式系統,Supplicant是在客戶端站中使用的IEEE 802.1X/WPA組件,它使用WPA身份驗證器實現秘鑰協商,並控制漫游和IEEEE802.11認證/關聯的WLAN驅動程序
wpa_supplicant被設計成一個在后台運行的"守護進程"程序,並作為控制無線連接的后端組件,wpa_supplicant支持單獨的前端程序,包含基於文本的前端(wpa_cli)和GUI(wpa_gui)
wpa_supplicant使用靈活的構建配置,可用於選擇包含哪些功能.允許最小代碼大小(WPA/WPA2-Personal 50kb 130kb的WPA/WPA2-Enterprise中沒有調試代碼,450kb大小具有大多數功能和全面的調試支持,這些示例大小來自X86平台的構建)

編譯安裝

Installation Environment :  Ubuntu 18.04 
Download (HTTP): https://w1.fi/releases/wpa_supplicant-2.6.tar.gz
Download MD5 sum: 091569eb4440b7d7f2b4276dbfc03c3c
Download size: 2.6 MB
Estimated disk space required: 36 MB
Estimated build time: 0.4 SBU (includes optional gui)

注意安裝依賴,wpa_supplicant 依賴於 openssl , libnl

配置

wpa_supplicant的配置方式和其他的開源庫不一樣

  • wpa_supplicant目錄中cp defconfig .config 拷貝生成編譯配置

  • 配置文件中可以針對功能進行裁剪,適應更多的平台, 如指定openssl 庫的路徑, 配置libnl的版本

    # Uncomment following two lines and fix the paths if you have installed OpenSSL
    # or GnuTLS in non-default location
    #CFLAGS += -I/usr/local/openssl/include
    #LIBS += -L/usr/local/openssl/lib
    
    # Use libnl v2.0 (or 3.0) libraries.
    #CONFIG_LIBNL20=y
    
    # Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
    #CONFIG_LIBNL32=y
    
  • 指定編譯器,默認的編譯器為GCC,如需要交叉編譯需要修改Makefile

    CC=arm-linux-gnueabihf-gcc
    
  • 指定安裝路徑, 默認的安裝路徑為/usr/local/目錄下,交叉編譯的時候需要指定路徑來存放, 方便打包制作文件系統,同時也不會影響系統, 指定路徑需要修改Makefile 中

     export LIBDIR ?= /usr/local/lib/
     export INCDIR ?= /usr/local/include/
     export BINDIR ?= /usr/local/sbin/
    

安裝

make
make install

最后生成二進制可執行文件wpa_supplicantwpa_cli

常用操作

wpa_supplicant是一個連接、配置WiFi的工具,它主要包含wpa_supplicant與wpa_cli兩個程序。 可以通過wpa_cli來進行WiFi的配置與連接,前提要保證wpa_supplicant正常啟動。

相當於wpa_supplicant 是服務端,wpa_cli 是客戶端。

  • 啟動wpa_supplicant應用
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
  • -D 驅動程序名稱(可以是多個驅動程序:nl80211,wext)
  • -i 接口名稱
  • -c 配置文件
  • -B 在后台運行守護進程

配置文件 /etc/wpa_supplicant.conf文件里,添加下面代碼:

ctrl_interface=/var/run/wpa_supplicant 
update_config=1  // 強制更新覆蓋配置 
  • ctrl_interface指向的是一個目錄,在這個目錄中默認會生成一個文件/var/run/wpa_supplicant/wlan0,這是local socket address,相當於UNIX Domain Socket,程序和后台程序wpa_supplicant進行通信(其實是wpa_supplicant作為后台服務程序是通過本地socket和客戶端進行通信的)

  • update_config = 1時會在(客戶端發送SAVE_CONFIG命令)更新這個配置文件。

wpa_supplicant.conf配置文件解析:

update_config=1      //是否允許wpa_supplicant更新(覆蓋)配置
eapol_version=1  //IEEE 802.1X / EAPOL版本
ap_scan=1  //AP掃描/選擇
passive_scan=0   //是否強制被動掃描進行網絡連接
user_mpm=1   //MPM駐留
max_peer_links=99  //最大對等鏈路數(0-255;默認值:99)
mesh_max_inactivity=300   //檢測STA不活動的超時(以秒為單位)(默認值:300秒)
cert_in_cb=1  //cert_in_cb - 是否在事件中包含對等證書轉儲
fast_reauth=1   //EAP快速重新認證
driver_param="field=value"   //驅動程序接口參數
country=US  //國家碼
dot11RSNAConfigSATimeout=60  //PMKSA的最長壽命,以秒為單位; 默認43200
uuid=12345678-9abc-def0-1234-56789abcdef0  //設備的通用唯一標識符
auto_uuid=0   //自動UUID行為
device_name=Wireless Client  //設備名稱
manufacturer=Company  //生產廠家
model_name=cmodel  //型號名稱
model_number=123 // 型號
serial_number=12345  //序列號
device_type=1-0050F204-1  //主要設備類型
os_version=01020300    //操作系統版本
config_methods=label virtual_display virtual_push_button keypad  //配置方法
wps_cred_processing=0   //憑證處理
wps_vendor_ext_m1=000137100100020001  //WPS M1中的供應商屬性,例如,Windows 7垂直配對
wps_nfc_dev_pw: Hexdump of Device Password     //WPS的NFC密碼令牌
wps_priority=0  //通過WPS添加網絡的優先級
bss_max_count=200   //要保留在內存中的最大BSS條目數
filter_ssids=0  //filter_ssids - 基於SSID的掃描結果過濾
p2p_disabled=1   //禁用P2P功能
p2p_go_max_inactivity=300  //檢測STA不活動的超時(以秒為單位)(默認值:300秒)
p2p_passphrase_len=8   //P2P GO的密碼長度
p2p_search_delay=500   //並發P2P搜索迭代之間的額外延遲
okc=0   //機會密鑰緩存(也稱為主動密鑰緩存)默認
pmf=0  //受保護的管理框架
sae_groups=21 20 19 26 25  //按優先順序啟用SAE有限循環組
dtim_period=2   //DTIM周期的默認值(如果未在網絡塊中覆蓋)
beacon_int=100   //Beacon間隔的默認值(如果未在網絡塊中覆蓋)
ap_vendor_elements=dd0411223301   //Beacon和Probe Response幀的其他供應商特定元素
ignore_old_scan_res=0  //忽略比請求更早的掃描結果
mac_addr=0  //MAC地址策略
rand_addr_lifetime=60  //隨機MAC地址的生命周期,以秒為單位(默認值:60)
preassoc_mac_addr=0   //預關聯操作的MAC地址策略(掃描,ANQP)
gas_rand_mac_addr=0  //GAS操作的MAC地址策略
gas_rand_addr_lifetime=60   //GAS隨機MAC地址的生命周期(以秒為單位)
interworking=1   //啟用互通
go_interworking=1   //啟用互通的P2P GO廣告
go_access_network_type=0   //P2P GO互通:接入網絡類型
go_internet=1   //P2P GO互通:網絡是否提供到Internet的連接
go_venue_group=7  go_venue_type=1  //p2p-go互通:群組場館信息(可選)
hessid=00:11:22:33:44:55  //同源ESS標識符
auto_interworking=0   //自動網絡選擇行為
gas_address3=0  //GAS Address3字段行為
ftm_responder=0  // 在擴展功能元素位70中發布精確定時測量(FTM)響應器功能。
ftm_initiator=0  //在擴展功能元素位71中發布精確定時測量(FTM)啟動器功能。
mbo_cell_capa=3  //MBO蜂窩數據功能
non_pref_chan=81:5:10:2 81:1:0:2 81:9:0:2  //多頻段操作(MBO)非首選頻道
 oce=1       //優化的連接體驗(OCE)
mem_only_psk=0        //mem_only_psk:是否僅在內存中保留PSK /密碼

啟動wpa_cli應用

wpa_cli 有命令和交互的方式進行操作

wpa_cli -i wlan0 scan              //搜索附件wifi熱點
wpa_cli -i wlan0 scan_result   //顯示搜索wifi熱點
wpa_cli -i wlan0 status              //當前WPA/EAPOL/EAP通訊狀態
wpa_cli -i wlan0 ping                //pings wpa_supplicant

添加新的連接

wpa_cli -i wlan0 add_network   //添加一個網絡連接,會返回<network id> 
wpa_cli set_network <network id>  ssid '"name"'  //ssid名稱 
wpa_cli set_network <network id>  psk '“psk”'  //密碼
wpa_cli set_network <network id>  scan_ssid 1   
wpa_cli set_network <network id>  priority  1   //優先級

保存連接

wpa_cli -i wlan0 save_config   //信息保存到默認的配置文件中,前面提到的/etc/wpa_supplicant.conf

斷開連接

wpa_cli -i wlan0 disable_network <network id>  

連接已有連接

wpa_cli -i wlan0 list_network  //列舉保存過得連接
wpa_cli -i wlan0 select_network  <network id>  //連接指定的ssid 
wpa_cli -i wlan0 enable_network  <network id>  //使能制定的ssid 

使用wpa_passphrase

配置文件

我們一開始需要使用wpa_passphrase生成一個用於連接wifi的配置文件

[1] % wpa_passphrase
usage: wpa_passphrase <ssid> [passphrase]

If passphrase is left out, it will be read from stdin
  • ssid:要連接的WIFI名稱
  • passphrase:密碼
wpa_passphrase test_wifi 12345678 > /etc/wpa_supplicant/test.conf

wpa_passphrase的配置文件示例

ctrl_interface=/var/run/wpa_supplicant  # 一個目錄,用於wpa_supplicant和wpa_cli的socket通信
network={
        ssid="dswei"		#WIFI名稱
        proto=WPA  # proto: list of accepted protocols, 可取WPA,RSN
                   # 如果沒有設置,默認為: WPA RSN
        key_mgmt=WPA-PSK # 認證方式
                         # 如果沒有設置,默認為: WPA-PSK WPA-EAP
        pairwise=TKIP    # 如果沒有設置,默認為: CCMP TKIP
        group=TKIP       # 如果沒有設置,默認為: CCMP TKIP WEP104 WEP40 
        psk="a123654"	 # WIFI密碼
}

測試和連接WIFI

 ifconfig wlan0 up
 wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf 
  • -D 指定網卡驅動可為: nl80211 wext
  • -i 指定網卡
  • -c 指定配置文件
  • & 掛起在后台

dhcp獲取ip地址

dhclient 

如果是靜態IP

fconfig wlan0 192.168.1.119 netmask 255.255.255.0
route add default gw 192.168.1.1
  • 192.168.1.119 為要設置的靜態ip
  • 255.255.255.0 為要設置的子網掩碼
  • 192.168.1.1 為要設置的網關

如果無法上網

  1. kill 掉 wpa_supplicant 和 dhclient 的進程 以重新測試
  2. 檢查網卡名
  3. 檢查配置文件
  4. -D更換驅動
  5. dns問題

開機啟動

加入開機腳本:

 touch /etc/rc.local
 chmod +x /etc/rc.local

腳本內容(命令請自行更改為測試通過的命令)

如果沒有測試通過,千萬不能寫進開機腳本,防止不能開機

#!/bin/sh

ifconfig wlan0 up
wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf  #-B 參數為后台Daemon運行
dhclient 

exit 0

重啟測試能否自動連接上wifi

最后還是不行的話

可以使用nmtui連接,這是一款帶有終端GUI 的軟件,沒有請自行百度安裝。

參考

玩轉「Wi-Fi」系列之wpa_supplicant 介紹(七)


免責聲明!

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



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