wpa_supplicant工具使用

wpa_supplicant工具使用

1.介绍

wpa_supplicant 是一个广泛使用的工具,用于实现 Wi-Fi 网络的安全认证,支持 WPA、WPA2 和 WPA3 协议。它适用于 Linux、BSD、macOS 和 Windows 系统,并且非常适合桌面计算机和嵌入式系统。

主要特点
  1. 支持多种安全协议:包括 WPA、WPA2 和 WPA3。
  2. 后台运行:作为守护进程(daemon)在后台运行,控制无线连接。
  3. 前端程序支持 :支持多种前端程序,包括基于文本的 wpa_cli 和图形界面的 wpa_gui
  4. 跨平台:适用于多种操作系统,包括 Linux、BSD、macOS 和 Windows。

2.编译

wpa_supplicant工具需要在嵌入式设备上使用,需要交叉编译,使用第三方工具buildroot 包编译

1.下载wpa_supplicant

复制代码
make source  //下载config的全部包

2.单编wpa_supplicant

复制代码
make wpa_supplicant-build
make wpa_supplicant-install

编译完成相关的so、bin和include文件会统一打包到output/target下

3.wpa_supplicant使用

1.wpa_supplicant连接ap

使用wpa工具之前需要初始化wpa_supplicant服务

wpa_supplicant.conf配置文件

复制代码
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1  //auto scan ap

初始化wpa_supplicant

复制代码
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -dddd  -s -B

扫描ap

复制代码
wpa_cli -i wlan0 scan	//开始扫描
wpa_cli -i wlan0 scan_results	//得到扫描的wifi list

连接wp2 ap流程

shell 复制代码
wpa_cli -i wlan0 disable_network 0
wpa_cli -i wlan0 remove_network 0
wpa_cli -i wlan0 add_network
wpa_cli -i wlan0 set_network 0  ssid '"ssid_name"'  //ssid_name  ap热点名称
wpa_cli -i wlan0 set_network 0 psk  '"psk_value"'	//psk		 ap秘钥
wpa_cli -i wlan0 enable_network 0

连接wpa3 流程

连接wpa3的ap之前,需要确认下wifi驱动和wpa_supplicant工具是否都支持wpa3功能,wpa_supplicant工具是使用buildroot编译的,需要打开Enable WPA3 support, config中配置把BR2_PACKAGE_WPA_SUPPLICANT_WPA3打开, 这样wpa_supplicant工具就可以支持wpa3

复制代码
wpa_cli -i wlan0 disable_network 0
wpa_cli -i wlan0 remove_network 0
wpa_cli -i wlan0 add_network
wpa_cli -i wlan0 set_network 0 key_mgmt SAE	//SAE:wpa3 超强加密
wpa_cli -i wlan0 set_network 0 ieee80211w 2	//
wpa_cli -i wlan0 set_network 0  ssid '"ssid_name"'  //ssid_name  ap热点名称
wpa_cli -i wlan0 set_network 0 psk  '"psk_value"'	//psk		 ap秘钥
wpa_cli -i wlan0 enable_network 0

连接命令执行完之后,wlan0已经连上热点,可以使用命令查看连接热点的信息

shell 复制代码
# wpa_cli -i wlan0 status
bssid=a4:a9:30:98:09:d1	//这是接入点(AP)的 MAC 地址
freq=2412
ssid=Simon_tp
id=0
mode=station			//表示当前设备作为客户端(Station)模式运行
pairwise_cipher=CCMP	//对称加密算法:表示用于一对一(Pairwise)通信的加密算法。CCMP 是基于 AES 的加密算法,常用于 WPA2。
group_cipher=TKIP		//组加密算法:表示用于广播和多播(Group)通信的加密算法。TKIP 是 WEP 的升级版,常用于 WPA。
key_mgmt=WPA2-PSK		//密钥管理:表示密钥管理方式。WPA2-PSK 表示使用预共享密钥(Pre-Shared Key)的方式进行密钥管理,即使用密码来认证客户端和接入点之间的连接。
wpa_state=COMPLETED		//WPA 状态:表示当前连接的状态。COMPLETED 表示认证和密钥交换已完成,设备已经成功连接到 Wi-Fi 网络。
address=34:04:9e:69:df:c7	//表示设备的 MAC 地址

连接成功之后,可以使用udhcp -i wlan -b获取ip地址

2. wpa_supplicant faq
1.debug 信息

调试过程中,连接wifi时wpa_supplicant下发命令会与驱动进行握手,debug信息需要查看

复制代码
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -dd  -s -B	//-s 重定向log到syslog,-dd debug信息
wpa_cli -i wlan0 log_level DEBUG	//打开wpa_supplicant debug信息

nf -dd -s -B //-s 重定向log到syslog,-dd debug信息

wpa_cli -i wlan0 log_level DEBUG //打开wpa_supplicant debug信息

复制代码
相关推荐
xexpertS34 分钟前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维
带娃的IT创业者1 小时前
突破内存瓶颈:利用 Nvidia GPU 显存作为 Linux Swap 空间的深度实践
linux·运维·服务器·nvidia·swap·gpu显存
zy happy1 小时前
VMware虚拟机添加新的硬盘
java·linux·jvm·docker
LCG元1 小时前
嵌入式开发踩坑排查实战:从 STM32 外设初始化到 Linux SPI 驱动的 15 类硬件疑难故障深度复盘
linux·stm32·单片机
代码AC不AC1 小时前
【Linux】Socket编程TCP
linux·tcp·socket编程
扛枪的书生1 小时前
SeaweedFS 学习总结
linux
minglie12 小时前
香橙派zero3配个iic屏显示ip
linux·学习
edwarddamon2 小时前
SSH 指定端口建立隧道:打通内网访问完整教程
linux·命令行
ShirleyWang0122 小时前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
酷可达拉斯3 小时前
Linux操作系统-shell编程(1)
linux·运维·服务器