【全志系统 - WIFI - 4】- STA模式

1. 前言

目前wifi调试,最重要的工具有两个:

    1. wpa_supplicant: WiFi Protected Access,网络安全访问
    1. wireless-tools:

wpa_supplicant 是一个 独立运行的 守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。

wpa_supplicant 重要包括两个可执行工具:

工具 说明 备注
wpa_supplicant wifi服务器 连接wifi,断开wifi,启动热点等
wpa_cli wifi客户端 通过本地socket连接wpa_supplicant,发送命令

本博主要讲解wpa_supplicant的用法!

2. wpa_supplicant

2.1 配置文件

指令cat /etc/wifi/wpa_supplicant.conf

更换wifi可手动修改该配置文件

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    ##加了优先级,貌似并没有什么卵用
}

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

Notice:详情可参考以下连接

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

选项 说明 备注
ssid 连接的wifi名称
key_mgmt 加密级别 无密码为NONE
psk wifi密码 无密码则无此项
ctrl_interface 控制接口 外部程序打开该控制接口;
从而管理wpa_supplicant;
默认为/var/run/wpa_supplicant
ctrl_interface_group 可控制wpa_supplicant的群组ID 默认为root,ID=0
update_config 是否允许外部更新/覆盖该配置文件 默认是允许的
不允许只需要注释掉(加#)
ap_scan 接入点的扫描和选择
network 连接的路由器信息 可设置多个,按顺序连接;
第一个连接失败,会尝试第二个

2.2 wpa_supplicant 参数信息

选项 说明
-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

最常用的指令有如下几个:

  • i:指定端口
  • c:指定配置文件
  • D:指定使用的wifi驱动

如我的系统配置:

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

驱动解释:

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

接口解释

接口 IP 说明
Lo 127.0.0.1 Local Loopback,虚拟回环接口;
在系统内部接收和发送数据包;
无需驱动程序
br0 None 网桥接口
可以将两个接口进行连接
对帧进行转发
eth0 ABC类网址内网地址 以太网接口与网卡对应
每个MAC对应一个以太网接口
其工作完全由网卡相应的驱动程序控制
WLAN0 同上 无线网卡对应的接口
无线网卡需要对应的驱动程序才能工作

Notice

启动wpa_supplicant之前wifi必须先启动,wpa_supplicnat使用在wifi client端口上
wifi启动命令:ifconfig wlan0 up

2.3 wpa_cli 参数信息

shell中键入 wpa_cli后,进入一个交互界面,可输入如下指令进行对应的操作!
Notice:如果不想进入交互界面,可采用 wpa_cli [command]

指令 缩写 说明
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 手动连接流程

现在演示以下一个完整的联网过程:
0. 前提:启动wpa_supplicant

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

1. 启动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. 扫描附近的网络

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

3. 列出扫描到的网络

> 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. 列出当前的配置文件wpa_supplicant.conf中的配置网络
我的配置中没有任何信息

> list_network
network id / ssid / bssid / flags

5. 增加一个network
此处因为没有网络配置,所以从0开始加

> add_network 0
0

> set_network 0 ssid "APP-TEST1"  【设置SSID】
OK
> list_network    【列出当前网络】
network id / ssid / bssid / flags
0       APP-TEST1       any     [DISABLED]
> set_network 0 psk "SetPwdYourself"    【设置密码】
OK
> get_network 0 psk
*

6. 使能添加的网络

> 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. 将刚配置的信息写入到配置文件

> save_config
OK

8. 查看配置文件信息

wpa_supplicant.conf

2.5 自动连接流程

自动连接需要提前配置wpa_supplicant.conf文件,具体配置方式见 2.1节

此处采用shell脚本的形式,避免一条条的手动输入,麻烦!!

#!/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) ,目的就是方便管理区域网络內的裝置,当一台 PC 连接到区域网络时,可向 DHCP Server 自动获取可用的 IP,并取得 subnet mask,gateway。

既然是网络通信,肯定是要用DHCP的,网络通信方式一般包括如下三种:

    1. 接入已有网络:即作为STA方式,此时DHCP为客户端
    1. 做AP热点:即AP模式,DHCP此时为服务端
    1. 固定IP:DHCP不工作

DHCP的参数如下:

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • 家里台式机已经几年没用过了,本着废物再利用的心态,准备做成服务器使用。记录下来操作过程以备以后使用。 总体步骤: ...
    勇勇_cf62阅读 2,884评论 0 1
  • 年前换了部手机还是iphone的,但是几年过去了,google邮箱,digg reader的google账...
    xaiolos阅读 26,823评论 16 18
  • 目录结构说明 一、环境说明 1、环境介绍 2、确认usbwifi网卡信息 3、相关驱动 二、配置编译驱动 0、编译...
    vencol阅读 9,740评论 0 1
  • 今天一直出现Wi-Fi连接不上的问题。我也不知道怎么回事。百度找了几个方法来测试。但是都没有效果。最后手机开热点解...
    小风xf阅读 3,748评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,492评论 16 22