简介

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 中
  20 export LIBDIR ?= /usr/local/lib/21 export INCDIR ?= /usr/local/include/22 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_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   //优先级
  • 添加无密码的连接
//连接无密码的ssid 字段,需要添加key_mgmt=NONE去连接这个网络
network={key_mgmt=NONEssid="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
  • 网络连接成功的配置文件示例
ctrl_interface=/var/run/wpa_supplicant/
ap_scan=1
network={scan_ssid=1ssid="xxxx"psk="xxxx"bssid=priority=2
}

参考

  • wpa_supplicant 安装

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

  1. 拯救流浪猫 | 「喵先锋」系列数字版权盲盒明日开抢

    无界版图X奇帧元界  「喵先锋」系列 WORLD OF  CAT 「喵先锋」系列   2022年8月2日 11:00-14:00优先购 发售通知 ▷活动预告 平台将于北京时间2022年8月2日以盲盒形 ...

  2. 三招武林绝学带你玩转「强化学习」

    作者丨王维埙 学校丨天津大学硕士生 研究方向丨DRL & MAS 以彼之道还施彼身 ■ 论文 | Maintaining Cooperation in Complex Social Dilem ...

  3. 「分布式系统理论」系列专题

    如今互联网已经成为整个社会的基础设施,分布式系统并不是少数大公司的专属,所以分布式系统理论可能是你迟早需要掌握的知识. 如果你是程序员,相信这些文章你肯定能看懂:如果你不是程序员,相信这些能使你能更懂 ...

  4. 「分布式系统理论」系列专题整理

    以下内容出自微信公众号 跨界架构师 ,有兴趣的朋友可以参考我的博客 DotNet微信公众号简介 进行关注. [数据一致性] <分布式系统关注点(1)--数据一致性>(入门理解「一致性」) ...

  5. 微软应用商店的服务器,微软也玩起「快应用」,首批 PWA 应用登陆微软商店

    意大利媒体 Aggiornameti Lumia 近期发现,首批 Progressive Web App 已经悄然登陆微软商店. Progressive Web App,简称 PWA,是一种新的 We ...

  6. 趣链备案「飞洛」系列,帮你修路还帮你建加油站?

    落地应用丰富的科技公司. 文 |  遂心 出品 | Odaily星球日报(ID:o-daily) 自 2018 年熊市以来,市场越来越多地关注在了技术层面的发展.突出表现为去年大多讨论的还是" ...

  7. 3W字!带你玩转「消息队列」

    1. 消息队列解决了什么问题 消息中间件是目前比较流行的一个中间件,其中RabbitMQ更是占有一定的市场份额,主要用来做异步处理.应用解耦.流量削峰.日志处理等等方面. 1. 异步处理 一个用户登陆 ...

  8. er图转为数据流程图_「数据架构」实体关系模型介绍

    实体-关系模型(或ER模型)描述特定知识领域中相关的事物.基本的ER模型由实体类型(对感兴趣的事物进行分类)和指定实体之间可能存在的关系(那些实体类型的实例)组成. 在软件工程中,为了执行业务流程,E ...

  9. “高定美学”品牌矩阵:「莲玉芳华」「琢我」「佐我」佐我气运系列之进击

    WinderRoad稳略全球家族办公室旗下的中国式高阶生活美学代表: FinRise奋睿资本的 "高定美学"品牌矩阵内「莲玉芳华」「琢我」「佐我」又在海内外塑造中国式美学新形象与帮 ...

最新文章

  1. [转]几种最短路径算法的比较
  2. 非交互模式修改Ubuntu密码的命令
  3. 周志华《机器学习》课后习题解析(第四章):决策树
  4. 【深度学习】重大里程碑!VOLO屠榜CV任务,无需额外数据,首个超越87%的模型...
  5. hprose for java 教程_hprose for java源码分析-4
  6. 知名大学硕士生被通报,这件事千万别做!
  7. Java StringBuilder reverse()方法与示例
  8. IOS 单行文本输入框 UITextField 使用
  9. php multi_query()函数 实现批量执行sql语句
  10. rgb颜色查询工具_Web前端页面重构之工具篇(Photoshop)
  11. B站举办2021年度百大UP主盛典 科技知识类UP主占比翻倍
  12. 顺序表的基本操作(超详细)
  13. 【金九银十】java数据结构和算法第二版
  14. 2018年迎春杯复赛入围名单(三年级)
  15. 排序算法——希尔排序的图解、代码实现以及时间复杂度分析
  16. ESP32使用AT MQTT 固件发布主题信息返回ERROR解决
  17. 招商银行信用卡中心笔试编程题 - 序列找数
  18. 解读照明设备中国能效标示认证流程
  19. MATLAB处理信号得到频谱、相谱、功率谱
  20. 在ubuntu下安装minigui并搭建开发平台

热门文章

  1. plink提取特定染色体中特定区域内SNP位点信息
  2. 了解WiFi的原理、工作原理以及相关的标准。
  3. 为企业微信“服务商应用”更改微信插件中的消息弹出样式
  4. STM32实战总结:HAL之FSMC控制TFT-LCD
  5. C#中汉字排序简单示例(拼音/笔划)
  6. 授人以渔系列----如何win10安装ffmpeg
  7. php wordpress 代码模板,wordpress模板代码详解
  8. RWEQ模型的土壤风蚀模数估算、其变化归因分析
  9. 2019年6月20日工作总结---CSS篇
  10. 地震勘探原理(六)之地震组合方法原理