[wpa_supplicant]基于ubuntu的wpa_supplicant工具的安装与使用_ubuntu wpa_supplicant-程序员宅基地

技术标签: 网络  wpa_supplicant  

                                               基于ubuntu的wpa_supplicant工具的安装与使用

wpa_supplicant是WPA Supplicant组件的一个实现,即在客户站中运行的部分。它实现了WPA密钥与WPA认证者进行协商并使用EAP进行身份验证认证服务器。另外,它控制着漫游和IEEE802.11认证/关联的WLAN驱动程序。

wpa_supplicant被设计成一个运行在后台的守护进程,并充当控制无线连接的后端组件。wpa_supplicant包含一个支持单独的前端程序和一个示例基于文本的前端wpa_cli

 

使用WPA与AP关联时,使用以下步骤:

 

- wpa_supplicant请求内核驱动程序扫描相邻的BSS

- wpa_supplicant根据配置选择BSS

- wpa_supplicant请求内核驱动程序关联所选内容

  BSS

- 如果WPA-EAP:集成IEEE 802.1X请求者完成EAP

  认证服务器认证(由代理服务器代理)

  AP中的身份验证器)

- 如果从IEEE 802.1X请求者收到WPA-EAP:主密钥

- 如果WPA-PSK:wpa_supplicant使用PSK作为主会话密钥

- wpa_supplicant完成WPA 4次握手和组密钥握手

  与认证者(AP)

- wpa_supplicant为单播和广播配置加密密钥

- 可以发送和接收正常的数据包

 

第一章 安装

Wpa_supplicant的安装方法有两种:

第一种是在ubuntu中使用命令:

Sudo apt-get install wpasupplicant

该命令可将wpa_supplicant、wpa_cli、wpa_passphrase直接安装。十分方便

第二种是直接在官网下载源代码,编译、安装

 

1.1  使用命令安装

在终端输入sudo apt-get installwpasupplicant

1.2  源码编译安装

下载wpa_supplicant和openssl

由于wpa_supplicant需要使用openssl库,所以需要下载openssl库

下载源码

        http://hostap.epitest.fi/wpa_supplicant/

        下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁)

               #tar xvfz wpa_supplicant-0.7.3.tar.gz

        下载www.openssl.org/source/openssl-1.0.1c.tar.gz
               #tar zxvf openssl-1.0.1c.tar.gz

编译openssl库

1、首先openssl需要用到wpa_supplicant中的补丁(可能不需要)

把wpa_supplicant里面的patches文件夹下的openssl-0.9.8e-tls-extensions.patch文件拷贝到openssl-0.9.8za目录下

运行:

patch -p1 < openssl-0.9.8e-tls-extensions.patch

 

2、如果需要交叉编译,需要在makefile中修改以下三个变量。如下以arm为例

makefile修改 (-为去掉设置, +为新加的设置)

#vi makefile

- CC= cc

+ CC= arm-none-linux-gnueabi-gcc
 

- AR= ar $(ARFLAGS) r

+ AR= arm-none-linux-gnueabi-ar $(ARFLAGS)r

- RANLIB= /usr/bin/ranlib
+ RANLIB= arm-none-linux-gnueabi-ranlib
Makefile修改完毕

3、编译

#./config

#make 

#make install

编译需要root权限

 

编译过程可能出现错误:

PODdocument had syntax errors at /usr/bin/pod2man

  原因分析:这是由于OpenSSL 1.0.1e 与 perl5.18 不兼容。
  解决方法:
  1、有人验证 安装perl 5.16 可以兼容,安排低版本perl 5.16可以解决问题。
  2、删除 pod2man文件:
  sudo rm /usr/bin/pod2man

 

结果:

在/usr/local/ssl目录下安装了ssl库

Openssl安装即完成。

4、拷贝下面文件驱动到目标系统/usr/lib

libssl.a

libcrypto.a

 

openssl 移植完成.

 

编译wpa_supplicant 

1、交叉编译

进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:同样如果需要交叉编译,以arm为例,如果不需要则不用改变
        #cp defconfig        .config  //首先创建配置文件
        #vim .config     //需要交叉编译,修改配置文件
           CC=arm-linux-gcc  -L/usr/local/ssl/lib/
           #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
            CFLAGS +=-I/usr/local/ssl/include
            #CPPFLAGS +=-I../src/include -I../../src/router/openssl/include
            LIBS += -L/usr/local/ssl/lib
         #make      

错误1:

../src/drivers/driver_nl80211.c:25:31:fatal error: netlink/genl/genl.h: No such file or directory
compilation terminated.
make: *** [../src/drivers/driver_nl80211.o] Error 1

安装libnl-dev 和libpopt-dev后,编译成功。

 

错误2:

   Has  no member named ‘ssl’

 

是由于编译找不到ssl模块。安装openssl-devel,即解决

openssl-devel和openssl 是什么具体关系

Redhat在封装openssl的时候,把openssl分成了几个部分,执行码部分就是 openssl-1.0.0-27.el6.x86_64 这种包。openssl-devel-1.0.0-27.el6.x86_64这个就是包含了头文件,头文件参考,某些库文件等跟开发相关的东西。mod_ssl-2.2.15-26.el6.x86_64这个不是open ssl 本身的东西,是apache的模块。你在http://www.openssl.org/source/上下载的源码编译安装后得到的东西就是openssl-1.0.0-27.el6.x86_64和openssl-devel-1.0.0-27.el6.x86_64这两个包加在一起的内容。

另外,OpenSSL是分系列的,每个系列下再分版本 a b c d e…… 目前常用的是 0.9.8 1.0.0 1.0.1 三个系列。

RHEL 6.4 是openssl 1.0.0 系列的版本。RHEL 6.5 是 openssl 1.0.1 系列的版本。

Redhat 提供的openssl升级包的版本一般是openssl-1.0.0-27.el6.X.x86_64.rpm 这种。 Redhat 会把OpenSSL发布的补丁整合到现有版本中去,叫做backport。

例如,RHEL 6.4 目前的最新的OpenSSL就是2014-06-05发布的openssl-1.0.0-27.el6_4.4.x86_64.rpm 和openssl-devel-1.0.0-27.el6_4.4.x86_64.rpm 
RHEL 6.5 则是2014-08-13发布的openssl-1.0.1e-16.el6_5.15.x86_64.rpm 和openssl-devel-1.0.1e-16.el6_5.15.x86_64.rpm。因为不同系列的OpenSSL,存在的安全漏洞或者BUG不一定相同,所以版本要根据系列来判断。当然,如果你愿意手动编译安装openssl,那么也可以,只是注意相关软件的依赖。

 

 

经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:

wpa_supplicant和wpa_cli。

wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,

wpa_cli用来搜索、设置、和连接网络。

       wpa_passphrase:网络配置可以使用wpa_passphrase工具自动生成并添加到配置文件中。

将这三个可执行文件,copy到/usr/local/bin目录下,就可以在全局使用。

 

工具安装成功

第二章 使用

3.1 命令

https://wiki.archlinux.org/index.php/WPA_supplicant#Troubleshooting

该网页有整个使用过程的介绍

3.1.1 wpa_supplicant

用法

 wpa_supplicant [-BddfhKLqqtuvW] [-P<pid file>] [-g<globalctrl>] \

       [-G<group>] \

       -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>][-p<driver_param>] \

       [-b<br_ifname> [-MN -i<ifname> -c<conf>[-C<ctrl>] [-D<driver>] \

       [-p<driver_param>] [-b<br_ifname>] [-m<P2P Device configfile>] ...

 

选项

  -b= 可选的桥接接口名称

  -B= 后台运行

  -c= 配置文件路径

  -C= ctrl_interface 参数(仅在-c不使用的时候使用)

  -i= 接口名称

  -d= 增加调试信息详细程度(-dd显示更多)

  -D= 驱动名称

  -f= 将日志输出到默认日志位置(通常为/ tmp)

  -g= 全局ctrl_interface

  -G= 全局 ctrl_interface group

  -K= 包括密钥信息在调试中输出

  -t= 调试信息添加时间戳

  -h= 显示帮助文档

  -L= 显示许可证

  -p= 驱动程序参数

  -P= PID 文件

  -q= 减少调试信息详细程度(-qq更少)

  -u= 驱动 DBus control interface

  -v= 显示版本

  -W= 在启动之前等待control interface monitor

  -M= 开始描述匹配接口

  -N= 开始描述新接口

  -m= P2P Device的配置文件

 

驱动

 nl80211 = Linux nl80211/cfg80211

 wext = Linux wireless extensions (generic)

 wired = wpa_supplicant wired Ethernet driver

 roboswitch = wpa_supplicant Broadcom switch driver

  bsd= BSD 802.11 support (Atheros, etc.)

 ndis = Windows NDIS driver

 

通常示例

wpa_supplicant -Dnl80211,wext-c/etc/wpa_supplicant.conf -iwlan0 -B

 

3.1.2 wpa_cli

wpa_cli是一个基于文本的前端程序,用于与wpa_supplicant 进行交互。它用于查询当前状态,更改配置,触发事件并请求交互式用户输入。

wpa_cli支持两种模式:交互式和命令行。

wpa_cli命令:

status = 获取当前WPA/EAPOL/EAP 状态

  mib= 获取MIB变量

 help = 显示帮助文档

 interface [ifname] = 连接接口

 level <debug level> = 改变debug等级

license = 显示wpa_cli证书

 logoff = IEEE 802.1X EAPOL state machine logoff

 logon = IEEE 802.1X EAPOL state machine logon

  set= 设置变量

 pmksa = 显示PMKSA缓存

  reassociate= 强制重新连接

 reconfigure =强制wpa_supplicant重新读取配置文件

 preauthenticate <BSSID> = 强制预先认证

 identity <network id> <identity> = 为SSID配置身份

 password <network id> <password> =为SSID配置密码

  pin<network id> <pin> = 为SSID配置引脚

  otp<network id> <password> = 为SSID配置临时密钥

 passphrase <network id> <passphrase> =为SSID配置私钥

 bssid <network id> <BSSID> = 为SSID设置首选BSSID

 list_networks = 列举已经配置的网络

 select_network <network id> = 选择网络(关闭其他)

 enable_network <network id> = 启用网络

 disable_network <network id> = 禁用网络

 add_network = 添加网络

 remove_network <network id> = 删除网络

 set_network <network id> <variable> <value> =设置网络变量

  get_network<network id> <variable> = 获取网络变量

 save_config = 保存当前配置

 disconnect = 断开连接,等待重新连接命令

 scan = 扫描

 scan_results = 扫描结果

 get_capability <eap/pairwise/group/key_mgmt/proto/auth_alg> = 获取能力

 terminate = 终止wpa_supplicant

 quit = 退出wpa_cli

 

wpa_cli命令行选项

wpa_cli [-p<path to ctrl sockets>][-i<ifname>] [-hvB] [-a<action file>] \

       [-P<pid file>] [-g<global ctrl>]  [command..]

  -h= 显示使用文档

  -v=显示版本信息

  -a= 以守护进程方式运行

  -B= 后台运行

  默认套接字路径: /var/run/wpa_supplicant

  默认接口:在套接字路径中找到的第一个接口

3.1.3 wpa_passphrase

使用wpa_passphrase快速连接到其SSID已知的网络,wpa_passphrase是一种命令行工具,可生成wpa_supplicant所需的最小配置。

$ wpa_passphrase MYSSID  密码

 

3.2 运行

根据这两篇博文:

https://jingyan.baidu.com/article/ac6a9a5e4f411a2b653eace8.html

https://www.linuxidc.com/Linux/2011-04/34871.htm

 

运行wpa_supplicant需要注意,在ubuntu中的Networkmanager会影响wpa_supplicant的工作。

注意:很多操作需要root权限

第一步:

apt-get removeNetworkManager

第二步:

创建wpa_supplicant的配置文件。

       Vi /etc/wpa_supplicant.conf

内容如下:

ctrl_interface=/var/run/wpa_supplicant   //此意为与wpa_cli通信的套接字的位置

update_config=1                  //允许wpa_cli的save_config命令保存配置文件

 

 

这是最简单的配置文件

 

第三步:

    终端执行/etc/init.d/networking restart

        重启网卡

    注意:由于之前卸载networkmanager,所以此时的无线网卡应该是关闭状态

 

第四步:

Wpa_supplicant -B -Dnl80211 -c/etc/wpa_supplicant.conf -iwlan0 -d

 

第五步:

终端输入Wpa_cli。然后使用wpa_cli的交互模式,添加网络。

注意:wpa_supplicant和wpa_cli必须为同一用户。否则连接不上

 

第六步:

此时已经连接网络,但是由于dhcp未获取IP地址。所以没有IP地址。

终端dhclient命令,获取IP地址

第七步:(可能不需要)

可能此时没有DNS功能,无法解析域名

解决办法

修改 /etc/resolv.conf 添加内容 nameserver8.8.8.8 增加 DNS。

但是,上述方法会在重启后被清除,导致再次开机时需要重新配置,经过查阅网上资料,方法很多种,比较有效的就是,直接卸载掉开机重写该文件的 resolvconf。 
执行命令:sudo apt-get autoremove resolvconf

如果仍需要使用 resolvconf ,则可在卸载后,对 /etc/resolv.conf 加锁后再重新安装该软件,这样 resolvconf 就不会在开机时重写该文件。

# 文件加锁 不可写

sudo chattr +i /etc/resolv.conf 

# 文件解锁 可写

sudo chattr -i /etc/resolv.conf

3.3 常见问题

错误1  ioctl

Successfully initializedwpa_supplicant 
ioctl[SIOCSIWENCODEEXT]: Invalid argument 
ioctl[SIOCSIWENCODEEXT]: Invalid argument

 

原来在命令中

sudo wpa_supplicant -B -D n180211,wext -iwlo1 -c /home/wpa_supplicant.cfg

错把nl80211写成n180211,注意是数字1与字母l的区别。

错误2  current AP

wpa supplicant: No network configurationfound for current AP 
说明配置文件写的不对,尤其从网上复制过来时常有看不见的tab字符等。 
解决办法:从Archlinux文档上复制了一份格式正确的配置,再改一改就OK了 
Archlinux文档

错误3   delete

ctrl_iface exists and seems to be in use -cannot override it 
Delete ‘/var/run/wpa_supplicant/wlo1’ manually if it is not used anymore 
Failed to initialize control interface ‘/var/run/wpa_supplicant’. 
You may have another wpa_supplicant process already running or the filewas 
left by an unclean termination of wpa_supplicant in which case you willneed 
to manually remove this file before starting wpa_supplicant again. 


系统已经存在打开的多个wpa_supplicant实例,执行一下sudo killall wpa_supplicant杀死所有wpa_supplicant即可。

 

错误4  PF_UNIX failed

ctrl_iface bind(PF_UNIX)failed

不知道原因,但是将wpa_supplicant的配置文件中wpa_supplicant.conf中的:
ctrl_interface=/var/run/wpa_supplicant
注释掉,此时无法与wpa_cli连接,但是wpa_supplicant可以工作。

所以肯定是在于wpa_cli通信的套接字处失败。但是具体原因不清楚

 

原博客地址:

http://bbs.chinaunix.net/thread-3588469-1-1.html

 

错误5:wpa_cli:re-trying

wpa_cli的用法:

运行时可能会出现如下的错误:

Could not connect to wpa_supplicant - re-trying

这个错误可能是因为你的wpa_supplicant进程没有启动起来造成的。

请参见如下的命令:

1、修改wpa_supplicant.conf文件

将所有的内容都注释掉,只留下这一行语句:

  # /etc/wpa_supplicant.conf

  ctrl_interface=/var/run/wpa_supplicant

  #

2、启动wpa_supplicant进程:

wpa_supplicant -Dwext -iwlan0-c/etc/wpa_supplicant.conf &

wpa_supplicant -B -Dwext -iwlan0-c/etc/wpa_supplicant.conf 

3、然后ps -aux查看一下,是不是已经启动完成。

4、如果存在此进程,则你可以用wpa_cli命令进行进一步的配置。

wpa_cli -iwlan0

此时就不会再出现“Could not connect towpa_supplicant - re-trying" 的错误信息了。

而且会得到一个新的提示符" > "

错误5: wpa_cli:re-trying

如果wpa_supplicant是使用root用户启动,那么wpa_cli也要使用root用户。

即wpa_cli和wpa_supplicant需要同一用户下启动

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012503786/article/details/79541811

智能推荐

在ubuntu 8.04下安装Oracle 11g二-程序员宅基地

文章浏览阅读408次。 在ubuntu 8.04下安装Oracle 11g2008年05月22日 星期四 11:02oracle 11g 数据库虽然提供了linux x86的版本,但是支持的linux版本只有Red Hat,Novell and Solaris 这几个,debian 和 ubuntu 不在支持之列,所以在ubuntu下安装就相对麻烦一些,请照着下文的方法一步一步的安装,不

初一计算机知识点下册,初一英语下册语法知识点全汇总-程序员宅基地

文章浏览阅读166次。新东方在线中考网整理了《初一英语下册语法知识点全汇总》,供同学们参考。一. 情态动词can的用法can+动词原形,它不随主语的人称和数而变化。1. 含有can的肯定句:主语+can+谓语动词的原形+其他。2. 含有can的否定句:主语+can't+动词的原形+其他。3. 变一般疑问句时,把can提前:Can+主语+动词原形+其他? 肯定回答:Yes,主语+can。否定回答:No,主语+can't...._七年级下册计算机知识点

NX/UG二次开发—其他—UFUN函数调用Grip程序_uf调用grip-程序员宅基地

文章浏览阅读3k次。在平时开发中,可能会遇到UFUN函数没有的功能,比如创建PTP的加工程序(我目前没找到,哪位大神可以指点一下),可以使用Grip创建PTP,然后用UFUN函数UF_call_grip调用Grip程序。具体如下截图(左侧UFUN,右侧Grip程序):..._uf调用grip

Android RatingBar的基本使用和自定义样式,kotlin中文教程_ratingbar样式修改-程序员宅基地

文章浏览阅读156次。第一个:原生普通样式(随着主题不同,样式会变)第二个:原生普通样式-小icon第三个:自定义RatingBar 颜色第四个:自定义RatingBar DrawableRatingBar 各样式实现===============原生样式原生样式其实没什么好说的,使用系统提供的style 即可<RatingBarstyle="?android:attr/ratingBarStyleIndicator"android:layout_width=“wrap_cont.._ratingbar样式修改

OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_vs2017的opengl环境搭建(完整篇)-程序员宅基地

文章浏览阅读4.6k次,点赞6次,收藏11次。安装vs2017:参考vs2017下载和安装。安装cmake3.12.3:cmake是一个工程文件生成工具。用户可以使用预定义好的cmake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。可以从它官方网站的下载页上获取。这里我选择的是Win32安装程序,如图所示:然后就是运行安装程序进行安装就行。配置glfw3...._vs2017的opengl环境搭建(完整篇)

在linux-4.19.78中使用UBIFS_ubifs warning-程序员宅基地

文章浏览阅读976次。MLC NAND,UBIFS_ubifs warning

随便推点

计算机系统内存储器介绍,计算机系统的两种存储器形式介绍-程序员宅基地

文章浏览阅读2.2k次。计算机系统的两种存储器形式介绍时间:2016-1-6计算机系统的存储器一般应包括两个部分;一个是包含在计算机主机中的主存储器,简称内存,它直接和运算器,控制器及输入输出设备联系,容量小,但存取速度快,一般只存放那些急需要处理的数据或正在运行的程序;另一个是包含在外设中的外存储器,简称外存,它间接和运算器,控制器联系,存取速度虽然慢,但存储容量大,是用来存放大量暂时还不用的数据和程序,一旦要用时,就..._计算机存储器系统采用的是主辅结构,主存速度快、容量相对较小,用于 1 分 程序,外

西门子PLC的编程工具是什么?_西门子plc编程软件-程序员宅基地

文章浏览阅读5.6k次。1. STEP 7(Simatic Manager):STEP 7或者Simatic Manager是西门子PLC编程最常用的软件开发环境。4. STEP 7 MicroWin:STEP 7 MicroWn是一款专门针对微型PLC(S7-200系列PLC)的编程软件,是Simatic Manager的简化版。如果需要与PLC系统配合使用,则需要与PLC编程工具进行配合使用。除了上述软件之外,西门子还提供了一些配套软件和工具,如PLC模拟器、硬件调试工具等,以帮助PLC编程人员快速地进行调试和测试。_西门子plc编程软件

HashMap扩容_hashma扩容-程序员宅基地

文章浏览阅读36次。【代码】HashMap扩容。_hashma扩容

Eclipse maven项目中依赖包不全,如何重新加载?_maven资源加载不全,怎么重新加载-程序员宅基地

文章浏览阅读2.9k次。1mvn dependency:copy-dependencies2 项目右键 -> Maven -> Disable Maven Nature3 项目右键 -> Configure -> Convert to Maven Project_maven资源加载不全,怎么重新加载

mysql dml全称中文_MySQL语言分类——DML-程序员宅基地

文章浏览阅读527次。DMLDML的全称是Database management Language,数据库管理语言。主要包括以下操作:insert、delete、update、optimize。本篇对其逐一介绍INSERT数据库表插入数据的方式:1、insert的完整语法:(做项目的过程中将字段名全写上,这样比较容易看懂)单条记录插入语法:insert into table_name (column_name1,......_dml的全称是

【小工匠聊Modbus】04-调试工具-程序员宅基地

文章浏览阅读136次。可以参考: http://git.oschina.net/jrain-group/ 组织下的Java Modbus支持库Modbus-系列文章1、虚拟成对串口(1)下载虚拟串口软件VSPD(可在百度中搜索)image.png(2)打开软件,添加虚拟串口。在设备管理中,看到如下表示添加成功。..._最好用的 modebus调试工具

推荐文章

热门文章

相关标签