Linux 使用wpa_supplicant手动配置连接wifi
Linux 使用wpa_supplicant手动配置连接wifi
wpa_supplicant
简介
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 18.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 依赖于 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应用
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_supplicant.conf配置文件解析:
update_config=1 //是否允许wpa_supplicant更新(覆盖)配置
eapol_version=1 //IEEE 802.1X / EAPOL版本
ap_scan=1 //AP扫描/选择
passive_scan=0 //是否强制被动扫描进行网络连接
user_mpm=1 //MPM驻留
max_peer_links=99 //最大对等链路数(0-255;默认值:99)
mesh_max_inactivity=300 //检测STA不活动的超时(以秒为单位)(默认值:300秒)
cert_in_cb=1 //cert_in_cb - 是否在事件中包含对等证书转储
fast_reauth=1 //EAP快速重新认证
driver_param="field=value" //驱动程序接口参数
country=US //国家码
dot11RSNAConfigSATimeout=60 //PMKSA的最长寿命,以秒为单位; 默认43200
uuid=12345678-9abc-def0-1234-56789abcdef0 //设备的通用唯一标识符
auto_uuid=0 //自动UUID行为
device_name=Wireless Client //设备名称
manufacturer=Company //生产厂家
model_name=cmodel //型号名称
model_number=123 // 型号
serial_number=12345 //序列号
device_type=1-0050F204-1 //主要设备类型
os_version=01020300 //操作系统版本
config_methods=label virtual_display virtual_push_button keypad //配置方法
wps_cred_processing=0 //凭证处理
wps_vendor_ext_m1=000137100100020001 //WPS M1中的供应商属性,例如,Windows 7垂直配对
wps_nfc_dev_pw: Hexdump of Device Password //WPS的NFC密码令牌
wps_priority=0 //通过WPS添加网络的优先级
bss_max_count=200 //要保留在内存中的最大BSS条目数
filter_ssids=0 //filter_ssids - 基于SSID的扫描结果过滤
p2p_disabled=1 //禁用P2P功能
p2p_go_max_inactivity=300 //检测STA不活动的超时(以秒为单位)(默认值:300秒)
p2p_passphrase_len=8 //P2P GO的密码长度
p2p_search_delay=500 //并发P2P搜索迭代之间的额外延迟
okc=0 //机会密钥缓存(也称为主动密钥缓存)默认
pmf=0 //受保护的管理框架
sae_groups=21 20 19 26 25 //按优先顺序启用SAE有限循环组
dtim_period=2 //DTIM周期的默认值(如果未在网络块中覆盖)
beacon_int=100 //Beacon间隔的默认值(如果未在网络块中覆盖)
ap_vendor_elements=dd0411223301 //Beacon和Probe Response帧的其他供应商特定元素
ignore_old_scan_res=0 //忽略比请求更早的扫描结果
mac_addr=0 //MAC地址策略
rand_addr_lifetime=60 //随机MAC地址的生命周期,以秒为单位(默认值:60)
preassoc_mac_addr=0 //预关联操作的MAC地址策略(扫描,ANQP)
gas_rand_mac_addr=0 //GAS操作的MAC地址策略
gas_rand_addr_lifetime=60 //GAS随机MAC地址的生命周期(以秒为单位)
interworking=1 //启用互通
go_interworking=1 //启用互通的P2P GO广告
go_access_network_type=0 //P2P GO互通:接入网络类型
go_internet=1 //P2P GO互通:网络是否提供到Internet的连接
go_venue_group=7 go_venue_type=1 //p2p-go互通:群组场馆信息(可选)
hessid=00:11:22:33:44:55 //同源ESS标识符
auto_interworking=0 //自动网络选择行为
gas_address3=0 //GAS Address3字段行为
ftm_responder=0 // 在扩展功能元素位70中发布精确定时测量(FTM)响应器功能。
ftm_initiator=0 //在扩展功能元素位71中发布精确定时测量(FTM)启动器功能。
mbo_cell_capa=3 //MBO蜂窝数据功能
non_pref_chan=81:5:10:2 81:1:0:2 81:9:0:2 //多频段操作(MBO)非首选频道
oce=1 //优化的连接体验(OCE)
mem_only_psk=0 //mem_only_psk:是否仅在内存中保留PSK /密码
启动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
添加新的连接
wpa_cli -i wlan0 add_network //添加一个网络连接,会返回<network id>
wpa_cli set_network <network id> ssid '"name"' //ssid名称
wpa_cli set_network <network id> psk '“psk”' //密码
wpa_cli set_network <network id> scan_ssid 1
wpa_cli set_network <network id> priority 1 //优先级
保存连接
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
使用wpa_passphrase
配置文件
我们一开始需要使用wpa_passphrase
生成一个用于连接wifi的配置文件
[1] % wpa_passphrase
usage: wpa_passphrase <ssid> [passphrase]
If passphrase is left out, it will be read from stdin
- ssid:要连接的WIFI名称
- passphrase:密码
wpa_passphrase test_wifi 12345678 > /etc/wpa_supplicant/test.conf
wpa_passphrase
的配置文件示例
ctrl_interface=/var/run/wpa_supplicant # 一个目录,用于wpa_supplicant和wpa_cli的socket通信
network={
ssid="dswei" #WIFI名称
proto=WPA # proto: list of accepted protocols, 可取WPA,RSN
# 如果没有设置,默认为: WPA RSN
key_mgmt=WPA-PSK # 认证方式
# 如果没有设置,默认为: WPA-PSK WPA-EAP
pairwise=TKIP # 如果没有设置,默认为: CCMP TKIP
group=TKIP # 如果没有设置,默认为: CCMP TKIP WEP104 WEP40
psk="a123654" # WIFI密码
}
测试和连接WIFI
ifconfig wlan0 up
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf
- -D 指定网卡驱动可为: nl80211 wext
- -i 指定网卡
- -c 指定配置文件
- & 挂起在后台
dhcp获取ip地址
dhclient
如果是静态IP
fconfig wlan0 192.168.1.119 netmask 255.255.255.0
route add default gw 192.168.1.1
- 192.168.1.119 为要设置的静态ip
- 255.255.255.0 为要设置的子网掩码
- 192.168.1.1 为要设置的网关
如果无法上网
- kill 掉 wpa_supplicant 和 dhclient 的进程 以重新测试
- 检查网卡名
- 检查配置文件
- -D更换驱动
- dns问题
开机启动
加入开机脚本:
touch /etc/rc.local
chmod +x /etc/rc.local
脚本内容(命令请自行更改为测试通过的命令)
如果没有测试通过,千万不能写进开机脚本,防止不能开机
#!/bin/sh
ifconfig wlan0 up
wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf #-B 参数为后台Daemon运行
dhclient
exit 0
重启测试能否自动连接上wifi
最后还是不行的话
可以使用nmtui
连接,这是一款带有终端GUI 的软件,没有请自行百度安装。
参考
玩转「Wi-Fi」系列之wpa_supplicant 介绍(七)
Linux 使用wpa_supplicant手动配置连接wifi的更多相关文章
- 【Linux】freetds安装配置连接MSSQL
我使用的是freetds-0.91,下载地址:http://pan.baidu.com/s/1hq68rZY 安装编译(根据需要unixodbc): [root@zabbixserver / ]# t ...
- IntelliJ IDEA手动配置连接MySQL数据库
先从菜单View→Tool Windows→Database打开数据库工具窗口,如下图所示: 点击Database工具窗口左上角添加按钮"+",选择数据库类型,这里以MySQL为例 ...
- 树莓派命令行配置连接wifi
iwlist scan sudovim /etc/wpa_supplicant/wpa_supplicant.conf network={ ssid="WIFINAME" ...
- Linux环境下手动配置sbt
一.下载sbt安装包 从sbt官网下载地址:http://www.scala-sbt.org/download.html下载安装包,以sbt-0.13.13.tgz为例. 二.安装 1.将下载的二进制 ...
- 无屏幕和键盘配置树莓派WiFi和SSH
原文转载:http://shumeipai.nxez.com/2017/09/13/raspberry-pi-network-configuration-before-boot.html 不算是什么新 ...
- linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi
最近在调试wifi,已经把wpa_supplicant 工具编译打包好了,为了测试wif驱动及wifi模块是否ok,需要用shell命令临时启动wifi服务连接wifi热点测试. 首先板子启动用ifc ...
- wpa_supplicant 移植及 linux 命令行模式配置无线上网
本文涉及内容为linux 命令行模式配置无线上网 及 wpa_supplicant 移植到开发板的过程,仅供参考. 1.源码下载 wpa_supplicant 源码下载地址 :http://hosta ...
- wpa_supplicant - 强有力的终端 wifi 配置工具【转】
本文转载自:http://rickgray.me/2015/08/03/useful-command-tool-for-wifi-connection.html 最近网购了一套Raspberry-Pi ...
- 树莓派小用手册(安装系统,配置图形界面,连接WiFi,调用摄像头,安装ffmpeg)
安装树莓派系统(重装) 准备工作: 安装需要干净的TF卡(最好 8G 以上),如果是重装的话,需要先将其清理后再使用.清理步骤下面会给出,清理需要工具 DiskGenius,下载链接:http://w ...
随机推荐
- Java(22)常用API一
1 API 1.1 API概述 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的 ...
- 使用.NET(C#或VB.NET)开发NX外部程序
1.如何不用将exe程序拷贝到UGII目录下运行? 答:在调用NX Open命令函数前,将当前目录移动到NX安装目录\UGII\,NX安装目录必须和环境变量UGII_BASE_DIR的值一致,否则报错 ...
- .NET下使用ufun函数取CAM操作的进给速度
UF_PARAM_ask_subobj_ptr_value,这个函数在封装的时候,给了很大一个坑啊. NXOpen.UF.UFParam.AskSubobjPtrValue(ByVal param_t ...
- DL4J实战之六:图形化展示训练过程
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<DL4J实战>系列的第六 ...
- spark 解决错误java.io.InvalidClassException
今天遇到一个现场问题,任务报错java.io.InvalidClassException.在开发环境是没有报错的,正式环境报错.大概类似于下面这样(非报错原文,摘自网上同类博客) java.io.In ...
- 【UE4 设计模式】抽象工厂模式 Abstract Factory Pattern
概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...
- UltraSoft - Alpha - 发布声明
DDL_Killer Alpha版本发布声明 1. Alpha 阶段功能描述与版本实现 功能描述 设计原型 Alpha实现 登陆界面 注册界面 首页 日历视图 事项详情页 新建事项 列表视图 课程视图 ...
- Luogu P3758 [TJOI2017]可乐 | 矩阵乘法
题目链接 让我们先来思考一个问题,在一张包含$n$个点的图上,如何求走两步后从任意一点$i$到任意一点$j$的方案数. 我们用$F_p(i,j)$来表示走$p$步后从$i$到$j$的方案数,如果存储原 ...
- cf22A Second Order Statistics(STL-UNIQUE的使用)
题意: N个数,找出第二大的数.如果没有输出-1. 思路: UNIQUE的使用. 代码: int a[105]; int n; int main(){ cin>>n; rep(i,0,n- ...
- redis开外网访问
Redis: 注释掉bind 127.0.0.1可以使所有的ip访问redis 若是想指定多个ip访问,但并不是全部的ip访问,可以bind protected-mode no /etc/init.d ...