WIFI常用的两种模式:STA / AP
1. STA模式:客户端
嵌入式的系统下常常要手动配置wifi,和IP地址才能开始上网,关于STA模式下,常用的wifi配置工具有wpa_supplicant
和轻量级的udhcpc
客户端。
1.1wpa_supplicant 最小配置
wpa_supplicant
是一个开源的Wi-Fi客户端软件,用于在Linux系统上实现WPA(Wi-Fi Protected Access)和WPA2协议的认证和加密功能。它允许用户连接到受保护的无线网络,并提供了与各种认证和加密方法的兼容性。现在大部分无线网络使用 WPA/WPA2 加密,最少需要配置 wpa_supplicant 才能连接网络。另外,wpa_supplicant 目前只能连接到已经配置好 ESSID 的无线网络。
其实 wpa_supplicant 还有一个前端工具 wpa_cli👉:::wpa_supplicant 和 wpa_cli 的关系就像服务和客户端的关系,后台运行 wpa_supplicant,使用 wpa_cli 来搜索、设置、和连接网络。不过 wpa_cli 并不是必须的软件。直接使用wpa_supplicant 就可以完成 wifi 配置 *
wpa_supplicant 的运行常常需要借助一个配置文件wpa_supplicant.conf
,配置文件的最小内容写法↓ (priority越大,优先级越高)
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
update_config=1
network={
ssid="YSSS"
psk="12345687"
key_mgmt=WPA-PSK
priority=3
}
network={
ssid="H3C"
psk="12345687"
key_mgmt=WPA-PSK
priority=2
}
配置文件写完后即可尝试连接👇
wpa_supplicant -B -D nl80211 -i wlan0 -c wpa_supplicant.conf
参数 | 作用 |
---|---|
-B | 守护进程模式(后台) |
-D | 驱动类型,一般没什么变化 |
-i | 指定网卡 |
-c | 指定配置文件 |
1.2 udhcpc 获得IP
udhcpc是一个用于在Linux系统上获取和管理动态主机配置协议(DHCP)客户端的小型工具。它用于从DHCP服务器自动获取IP地址、子网掩码、默认网关和DNS服务器等网络配置信息,以便将Linux设备连接到网络并使其能够进行通信。
wpa_supplicant
建立连接后需要手动配置IP👇
udhcpc -b -i wlan0 -t 1 -T 1 -A 1 -R -H lyn_111
-b: 在后台运行udhcpc,以守护进程的方式工作。
-i wlan0: 指定接口为wlan0,即无线网络接口。
-t 1: 设置超时时间为1秒。如果在指定时间内无法获取IP地址,则停止尝试。
-T 1: 设置重试间隔为1秒。在每次尝试之间等待指定的时间。
-A 1: 启用ARP检查。在获取IP地址之前,先通过发送ARP请求来检查该地址是否已被使用。
-R: 使用服务器提供的IP地址。通常情况下,udhcpc会根据DHCP服务器提供的IP地址进行配置,而不是使用静态IP地址。
-H lyn_111: 设置主机名为"lyn_111"。主机名是在网络中用于标识设备的名称。
综上所述,该命令将以守护进程方式在后台运行udhcpc,并使用wlan0接口进行网络配置。它将在1秒内尝试获取IP地址,每次尝试之间等待1秒。在获取IP地址之前会进行ARP检查,并使用DHCP服务器提供的IP地址进行配置。此外,还设置了主机名为"lyn_111"。
下面是一个用 WPA supplicant 和 DHCP 连接无线网络的完整示例
[Linux]$ ip link set dev wlan0 up
[Linux]$ wpa_supplicant -B -i wlp6s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
[Linux]$ dhcpcd -i wlan0
要使用静态 IP,请将 dhcpcd 命令替换为:
[Linux]$ ip addr add 192.168.0.10/24 broadcast 192.168.0.255 dev wlan0
[Linux]$ ip route add default via 192.168.0.1
1.3 wpa_cli 小工具
wpa_supplicant
是一个客户端程序,用于管理和处理无线网络连接。它负责与无线硬件驱动程序(如 iwlwifi)交互,进行无线网络扫描、选择和连接,并处理 WPA、WPA2、WEP 等加密协议。
wpa_cli
是一个命令行客户端,用于与 wpa_supplicant 进行交互。它通过控制接口与wpa_supplicant 通信,可以查询状态、修改设置、触发连接等操作。wpa_cli 提供了一个交互式控制台,允许用户在命令行下查看、管理和诊断 Wi-Fi 连接。
在实际使用中,wpa_supplicant 通常在后台运行,负责自动处理无线连接,而 wpa_cli 用于手动调试、查看状态或进行控制。
#扫面附近wifi
wpa_cli -i wlan0 scan
#查看扫描结果
wpa_cli scan_results
#查看连接状态
wpa_cli status
#查看wpa_supplicant 中配置wifi信息
wpa_cli list_network
#切换wifi
wpa_cli select_network <network_id>
#常用command如下👇
wpa_cli [-p<path to ctrl sockets>] [-i<ifname>] [-hvB] [-a<action file>] \
[-P<pid file>] [-g<global ctrl>] [-G<ping interval>] [command..]
-h = help (show this usage text)
-v = shown version information
-a = run in daemon mode executing the action file based on events from
wpa_supplicant
-B = run a daemon in the background
default path: /var/run/wpa_supplicant
default interface: first interface found in socket path
commands:
scan = request new BSS scan
scan_results = get latest scan results
add_network = add a network
select_network <network id> = select a network (disable others)
enable_network <network id> = enable a network
disable_network <network id> = disable a network
remove_network <network id> = remove a network
set_network <network id> <variable> <value> = set network variables (shows
list of variables when run without arguments)
wpa_cli
也可直接进入命令交互状态
[root@luckfox data]# wpa_cli
Selected interface 'wlan0'
Interactive mode
> scan
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
scan_result
> bssid / frequency / signal level / flags / ssid
dc:65:55:58:5e:32 2437 -19 [WPA2-PSK-CCMP][ESS] H3C_YS
98:97:cc:79:e5:8b 2437 -37 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_YS
a2:97:cc:79:e5:8b 2437 -38 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_YS_LOT
a0:10:77:22:cc:60 2412 -33 [WPA2-PSK-CCMP][ESS] YS
f4:84:8d:86:23:87 2412 -47 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_YS_M_2.4G
> add_network
4
> set_network 4 ssid "TP-LINK_YS_M_2.4G"
OK
> set_network 4 psk "ys12345687"
OK
> enable_network 4
OK
> list_network
network id / ssid / bssid / flags
0 4G UFI-0E30 any [DISABLED]
1 YS any [DISABLED]
2 H3C_YS any [CURRENT]
3 yesen any [DISABLED]
4 TP-LINK_YS_M_2.4G any
> quit
2. AP : 接入点模式
2.1 hostapd 配置
hostapd
是一个用于创建和管理无线局域网(WLAN)的软件。可以将普通的无线网卡转变为一个无线热点,从而允许其他设备连接。
配置 hostapd 需要创建一个配置文件,通常存放在 /etc/hostapd/hostapd.conf
或其他自定义路径。以下是一个基本的配置示例👇
interface=wlan0 # 无线网卡的接口名称
driver=nl80211 # 使用 nl80211 驱动(现代的驱动接口,适用于大多数 Wi-Fi 网卡)
ssid=MyAccessPoint # 无线网络名称(SSID)
hw_mode=g # 设置 2.4 GHz 频段 (a 代表 5 GHz,g 代表 2.4 GHz)
channel=6 # 无线信道,选择 1-11 (2.4 GHz)
auth_algs=1 # 允许 WPA 身份验证(1 代表 WPA)
wpa=2 # 启用 WPA2 加密(2 代表 WPA2)
wpa_passphrase=yourpassword # Wi-Fi 密码
wpa_key_mgmt=WPA-PSK # 使用 PSK(预共享密钥)进行身份验证
rsn_pairwise=CCMP # 使用 CCMP 加密(WPA2 的标准加密方法)
使用方式和wpa类似,如果网卡不支持sta和ap共存的话 ,要关闭 sta 模式
hostapd -B /etc/hostapd/hostapd.conf
2.2 配置 udhcpd
hostapd
用于管理无线网络接口,使其充当接入点(AP),而 udhcpd
用于为连接到网络的客户端分配 IP 地址。将它们配合使用,可以在 Linux 系统上实现无线热点功能,并为接入的设备提供 DHCP 服务。
编辑/etc/udhcpd.conf
配置文件
start 192.168.10.20 # DHCP 分配 IP 地址的起始地址
end 192.168.10.50 # DHCP 分配 IP 地址的结束地址
interface wlan0 # 监听的接口
opt dns 8.8.8.8 # DNS 服务器
opt router 192.168.10.1 # 默认网关
lease 864000 # 租约时间,单位为秒(这里是 10 天)
启动服务👇
udhcpd -f udhcpd.conf
AP模式的完整启动流程:
ifconfig wlan0 down
hostapd -B hostapd.conf
udhcpd -f udhcpd.conf
ifconfig wlan0 192.168.10.1
ifconfig wlan0 up