玩转「Wi-Fi」系列之wpa_supplicant 介绍(七)

本文详细介绍了wpa_supplicant的配置与使用方法,包括编译安装过程、配置文件详解及常见操作命令,帮助读者掌握无线网络连接的高级设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:

简介
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 16.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的迭代版本 ,最新的版本为2016年10月的2.6版本

绿色背景 = 稳定版本
白色背景 = 开发版本
版本后的字母(发布中包含的内容)

d = Host AP driver
u = Host AP driver utilities
h = hostapd
w = wpa_supplicant

第三方依赖
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_supplicant 和wpa_cli 。
常用操作
wpa_supplicant是一个连接、配置WiFi的工具,它主要包含wpa_supplicant与wpa_cli两个程序。 可以通过wpa_cli来进行WiFi的配置与连接,前提要保证wpa_supplicant正常启动。
相当于wpa_supplicant 是服务端,wpa_cli 是客户端。

启动wpa_supplicant应用 (本博主附注,启动前ps -e|grep 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_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

添加新的连接(本博主附注,以下命令针对WAP加密类型)

wpa_cli -i wlan0 add_network   //添加一个网络连接,会返回<network id> 
wpa_cli -i wlan0 set_network <network id>  ssid '"name"'  //ssid名称 ,如 '"Eugene"'
wpa_cli -i wlan0 set_network <network id>  psk '"psk"'  //密码 如'"123321"'
wpa_cli -i wlan0 select_network <network id> //博主注,ubuntu机器上需要选中network id,之后才能工作
wpa_cli -i wlan0 enable_network <network id> //博主注,使能wifi
wpa_cli -i wlan status //验证wlan0状态,在博主机器上一般显示为wpa_state=DISCONNECTED
wpa_cli set_network <network id>  scan_ssid 1   
wpa_cli set_network <network id>  priority  1   //优先级

本博主附注:以上命令执行完毕后,需要为wlan0分配IP,才能上网。ubuntu可以用dhclient

sudo dhclient wlan0
ifconfig wlan0 #查看wlan0 IP

添加无密码的连接

//连接无密码的ssid 字段,需要添加key_mgmt=NONE去连接这个网络
network={
        key_mgmt=NONE
        ssid="wifi-name"
}
set_network num ssid "wifi-name"
set_network num key_mgmt NONE

保存连接

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 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值