【全志系統(tǒng) - WIFI - 4】- STA模式

1. 前言

目前wifi調(diào)試,最重要的工具有兩個(gè):

    1. wpa_supplicant: WiFi Protected Access,網(wǎng)絡(luò)安全訪(fǎng)問(wèn)
    1. wireless-tools:

wpa_supplicant 是一個(gè) 獨(dú)立運(yùn)行的 守護(hù)進(jìn)程,其核心是一個(gè)消息循環(huán),在消息循環(huán)中處理WPA狀態(tài)機(jī)、控制命令、驅(qū)動(dòng)事件、配置信息等。

wpa_supplicant 重要包括兩個(gè)可執(zhí)行工具:

工具 說(shuō)明 備注
wpa_supplicant wifi服務(wù)器 連接wifi,斷開(kāi)wifi,啟動(dòng)熱點(diǎn)等
wpa_cli wifi客戶(hù)端 通過(guò)本地socket連接wpa_supplicant,發(fā)送命令

本博主要講解wpa_supplicant的用法!

2. wpa_supplicant

2.1 配置文件

指令cat /etc/wifi/wpa_supplicant.conf

更換wifi可手動(dòng)修改該配置文件

root@TinaLinux:/usr# cat /etc/wifi/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
ap_scan=1

network={
        ssid="ZZ"
        key_mgmt=WPA-PSK
        psk="officeworking"
        priority=2    ##加了優(yōu)先級(jí),貌似并沒(méi)有什么卵用
}

network={
        ssid="Jimmy"
        key_mgmt=WPA-PSK
        psk="12345678"
        priority=1
}

Notice:詳情可參考以下連接

wpa_supplicant.conf配置解析-1
wpa_supplicant.conf配置解析-2

選項(xiàng) 說(shuō)明 備注
ssid 連接的wifi名稱(chēng)
key_mgmt 加密級(jí)別 無(wú)密碼為NONE
psk wifi密碼 無(wú)密碼則無(wú)此項(xiàng)
ctrl_interface 控制接口 外部程序打開(kāi)該控制接口;
從而管理wpa_supplicant;
默認(rèn)為/var/run/wpa_supplicant
ctrl_interface_group 可控制wpa_supplicant的群組ID 默認(rèn)為root,ID=0
update_config 是否允許外部更新/覆蓋該配置文件 默認(rèn)是允許的
不允許只需要注釋掉(加#)
ap_scan 接入點(diǎn)的掃描和選擇
network 連接的路由器信息 可設(shè)置多個(gè),按順序連接;
第一個(gè)連接失敗,會(huì)嘗試第二個(gè)

2.2 wpa_supplicant 參數(shù)信息

選項(xiàng) 說(shuō)明
-b optional bridge interface name
-B run daemon in the background
-c Configuration file
-C ctrl_interface parameter (only used if -c is not)
-d increase debugging verbosity (-dd even more)
-D driver name (can be multiple drivers: nl80211,wext)
-e entropy file
-g global ctrl_interface
-G global ctrl_interface group
-h show this help text
-i interface name
-I additional configuration file
-K include keys (passwords, etc.) in debug output
-L show license (BSD)
-N start describing new interface
-o override driver parameter for new interfaces
-O override ctrl_interface parameter for new interfaces
-p driver parameters
-P PID file
-q decrease debugging verbosity (-qq even less)
-t include timestamp in debug messages
-v show version
-W wait for a control interface monitor before starting

最常用的指令有如下幾個(gè):

  • i:指定端口
  • c:指定配置文件
  • D:指定使用的wifi驅(qū)動(dòng)

如我的系統(tǒng)配置:

eg. wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf

驅(qū)動(dòng)解釋?zhuān)?/strong>

  • nl80211 = Linux nl80211/cfg80211
  • wext = Linux wireless extensions (generic)
  • wired = Wired Ethernet driver

接口解釋

接口 IP 說(shuō)明
Lo 127.0.0.1 Local Loopback,虛擬回環(huán)接口;
在系統(tǒng)內(nèi)部接收和發(fā)送數(shù)據(jù)包;
無(wú)需驅(qū)動(dòng)程序
br0 None 網(wǎng)橋接口
可以將兩個(gè)接口進(jìn)行連接
對(duì)幀進(jìn)行轉(zhuǎn)發(fā)
eth0 ABC類(lèi)網(wǎng)址內(nèi)網(wǎng)地址 以太網(wǎng)接口與網(wǎng)卡對(duì)應(yīng)
每個(gè)MAC對(duì)應(yīng)一個(gè)以太網(wǎng)接口
其工作完全由網(wǎng)卡相應(yīng)的驅(qū)動(dòng)程序控制
WLAN0 同上 無(wú)線(xiàn)網(wǎng)卡對(duì)應(yīng)的接口
無(wú)線(xiàn)網(wǎng)卡需要對(duì)應(yīng)的驅(qū)動(dòng)程序才能工作

Notice

啟動(dòng)wpa_supplicant之前wifi必須先啟動(dòng),wpa_supplicnat使用在wifi client端口上
wifi啟動(dòng)命令:ifconfig wlan0 up

2.3 wpa_cli 參數(shù)信息

shell中鍵入 wpa_cli后,進(jìn)入一個(gè)交互界面,可輸入如下指令進(jìn)行對(duì)應(yīng)的操作!
Notice:如果不想進(jìn)入交互界面,可采用 wpa_cli [command]

指令 縮寫(xiě) 說(shuō)明
status stat displays the current connection status
disconnect disc prevents wpa_supplicant from connecting to any access point
quit q exits wpa_cli
terminate term kills wpa_supplicant
reconfigure recon reloads wpa_supplicant with the configuration file supplied (-c parameter)
scan scan scans for available access points (only scans it, doesn't display anything)
scan_result scan_r displays the results of the last scan
list_networks list_n displays a list of configured networks and their status (active or not, enabled or disabled)
select_network select_n select a network among those defined to initiate a connection (ie select_network 0)
enable_network enable_n makes a configured network available for selection (ie enable_network 0)
disable_network disable_n makes a configured network unavailable for selection (ie disable_network 0)
remove_network remove_n removes a network and its configuration from the list (ie remove_network 0)
add_network add_n adds a new network to the list. Its id will be created automatically
set_network set_n shows a very short list of available options to configure a network when supplied with no parameters.
get_network get_n displays the required parameter for the specified network. See next section for a list of parameters
save_config save_c saves the configuration

2.4 手動(dòng)連接流程

現(xiàn)在演示以下一個(gè)完整的聯(lián)網(wǎng)過(guò)程:
0. 前提:?jiǎn)?dòng)wpa_supplicant

root@TinaLinux:/# wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wifi/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant

1. 啟動(dòng)wpa_cli

root@TinaLinux:/usr/ty# wpa_cli
wpa_cli v2.6
Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.


Selected interface 'wlan0'

Interactive mode

2. 掃描附近的網(wǎng)絡(luò)

> scan
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>CTRL-EVENT-NETWORK-NOT-FOUND

3. 列出掃描到的網(wǎng)絡(luò)

> scan_result
bssid / frequency / signal level / flags / ssid
30:23:03:d3:3f:bf       2452    -44     [WPA2-PSK-CCMP][WPS][ESS]       SJoy Games
64:09:80:7a:49:05       2427    -48     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]       Xiaomi_4904
30:23:03:d3:46:03       2422    -43     [WPA2-PSK-CCMP][ESS]    SJoy Games
4c:ed:fb:82:27:c0       2422    -46     [WPA2-PSK-CCMP][WPS][ESS]       AC1900-106
30:23:03:d3:3f:97       2422    -52     [WPA2-PSK-CCMP][WPS][ESS]       SJoy Games
b2:52:16:c9:06:d9       2462    -56     [WPA2-PSK-CCMP][WPS][ESS]       DIRECT-d9-HP M227f LaserJet

4. 列出當(dāng)前的配置文件wpa_supplicant.conf中的配置網(wǎng)絡(luò)
我的配置中沒(méi)有任何信息

> list_network
network id / ssid / bssid / flags

5. 增加一個(gè)network
此處因?yàn)闆](méi)有網(wǎng)絡(luò)配置,所以從0開(kāi)始加

> add_network 0
0

> set_network 0 ssid "APP-TEST1"  【設(shè)置SSID】
OK
> list_network    【列出當(dāng)前網(wǎng)絡(luò)】
network id / ssid / bssid / flags
0       APP-TEST1       any     [DISABLED]
> set_network 0 psk "SetPwdYourself"    【設(shè)置密碼】
OK
> get_network 0 psk
*

6. 使能添加的網(wǎng)絡(luò)

> enable_network 0
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE

> list_network
network id / ssid / bssid / flags
0       APP-TEST1       any     [CURRENT]

7. 將剛配置的信息寫(xiě)入到配置文件

> save_config
OK

8. 查看配置文件信息

wpa_supplicant.conf

2.5 自動(dòng)連接流程

自動(dòng)連接需要提前配置wpa_supplicant.conf文件,具體配置方式見(jiàn) 2.1節(jié)

此處采用shell腳本的形式,避免一條條的手動(dòng)輸入,麻煩?。?/p>

#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
#Autor: Jimmy
#Date: 2020-11-06
#Version: v1.0

start_sta() {
    echo 0 > /sys/module/bcmdhd/parameters/op_mode
    echo /lib/firmware/fw_bcm43438a0.bin > /sys/module/bcmdhd/parameters/firmware_path
    ifconfig wlan0 up
    if [[ -e "/var/run/wpa_supplicant/wlan0" ]]; then
         rm "/var/run/wpa_supplicant/wlan0"
    fi
    wpa_supplicant -i wlan0 -c /etc/wifi/wpa_supplicant.conf -B
    udhcpc -i wlan0 &
}

stop_sta() {
    killall wpa_supplicant
    killall hostapd
    killall udhcpc
    killall dnsmasq
    ifconfig wlan0 down
}

restart_sta() {
    stop_sta
    sleep 1s
    start_sta
}


start_ap() {
        if [[ -z "$1" ]]; then
                mac_addr=$(ifconfig wlan0|awk '{print $5}'|cut -c 13-|tr -d ' :\n')
                ap_name="SmartLife-$mac_addr"
                softap_up $ap_name
        else
                softap_up $1
        fi
}

stop_ap() {
        softap_down
}

restart_ap() {
        stop_ap
        sleep 1s
        start_ap $1
}

case $1 in
        start_sta)
                start_sta
                ;;
        stop_sta)
                stop_sta
                ;;
        restart_sta)
                restart_sta
                ;;

        start_ap)
                start_ap $2
                ;;
        stop_ap)
                stop_ap
                ;;
        restart_ap)
                restart_ap $2
                ;;
        *)
                echo "Input option: $1 was error"
                ;;
esac

3. udhcpc

DHCP (Dynamic Host Configuration Protocol) ,目的就是方便管理區(qū)域網(wǎng)絡(luò)內(nèi)的裝置,當(dāng)一臺(tái) PC 連接到區(qū)域網(wǎng)絡(luò)時(shí),可向 DHCP Server 自動(dòng)獲取可用的 IP,并取得 subnet mask,gateway。

既然是網(wǎng)絡(luò)通信,肯定是要用DHCP的,網(wǎng)絡(luò)通信方式一般包括如下三種:

    1. 接入已有網(wǎng)絡(luò):即作為STA方式,此時(shí)DHCP為客戶(hù)端
    1. 做AP熱點(diǎn):即AP模式,DHCP此時(shí)為服務(wù)端
    1. 固定IP:DHCP不工作

DHCP的參數(shù)如下:

root@TinaLinux:/usr/ty# udhcpc -h
udhcpc: option requires an argument: h
BusyBox v1.24.1 () multi-call binary.

Usage: udhcpc [-fbqRB] [-t N] [-T SEC] [-A SEC/-n]
        [-i IFACE] [-s PROG] [-p PIDFILE]
        [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]...

        -i,--interface IFACE    Interface to use (default eth0)
        -s,--script PROG        Run PROG at DHCP events (default /usr/share/udhcpc/default.script)
        -p,--pidfile FILE       Create pidfile
        -B,--broadcast          Request broadcast replies
        -t,--retries N          Send up to N discover packets (default 3)
        -T,--timeout SEC        Pause between packets (default 3)
        -A,--tryagain SEC       Wait if lease is not obtained (default 20)
        -n,--now                Exit if lease is not obtained
        -q,--quit               Exit after obtaining lease
        -R,--release            Release IP on exit
        -f,--foreground         Run in foreground
        -b,--background         Background if lease is not obtained
        -S,--syslog             Log to syslog too
        -r,--request IP         Request this IP address
        -o,--no-default-options Don't request any options (unless -O is given)
        -O,--request-option OPT Request option OPT from server (cumulative)
        -x OPT:VAL              Include option OPT in sent packets (cumulative)
                                Examples of string, numeric, and hex byte opts:
                                -x hostname:bbox - option 12
                                -x lease:3600 - option 51 (lease time)
                                -x 0x3d:0100BEEFC0FFEE - option 61 (client id)
        -F,--fqdn NAME          Ask server to update DNS mapping for NAME
        -V,--vendorclass VENDOR Vendor identifier (default 'udhcp VERSION')
        -C,--clientid-none      Don't send MAC as client identifier
Signals:
        USR1    Renew lease
        USR2    Release lease
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • 家里臺(tái)式機(jī)已經(jīng)幾年沒(méi)用過(guò)了,本著廢物再利用的心態(tài),準(zhǔn)備做成服務(wù)器使用。記錄下來(lái)操作過(guò)程以備以后使用。 總體步驟: ...
    勇勇_cf62閱讀 3,147評(píng)論 0 1
  • 年前換了部手機(jī)還是iphone的,但是幾年過(guò)去了,google郵箱,digg reader的google賬...
    xaiolos閱讀 27,206評(píng)論 16 18
  • 目錄結(jié)構(gòu)說(shuō)明 一、環(huán)境說(shuō)明 1、環(huán)境介紹 2、確認(rèn)usbwifi網(wǎng)卡信息 3、相關(guān)驅(qū)動(dòng) 二、配置編譯驅(qū)動(dòng) 0、編譯...
    vencol閱讀 10,484評(píng)論 0 1
  • 今天一直出現(xiàn)Wi-Fi連接不上的問(wèn)題。我也不知道怎么回事。百度找了幾個(gè)方法來(lái)測(cè)試。但是都沒(méi)有效果。最后手機(jī)開(kāi)熱點(diǎn)解...
    小風(fēng)xf閱讀 4,013評(píng)論 0 0
  • 久違的晴天,家長(zhǎng)會(huì)。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,828評(píng)論 16 22

友情鏈接更多精彩內(nèi)容