linux 系统平台:
一. wpa_supplicant介绍
WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。
Wpa_supplicant是一个免费的IEEE 802.1x客户端软件,支持多种操作系统,包括:Linux,BSD, 苹果计算机的Mac OS, 以及微软的Windows操作系统。它同时支持(无线受保护访问)WPA和WPA2(IEEE 802.11i / RSN)。Wpa_supplicant被设计成在后台运行来控制无线连接。同时拥有图形用户界面和命令行界面来监听运行的客户端。通过这些用户界面,用户可以看到所有可得到的网络
直译为: 用户空间802.1x/WPA请求者(无线client端),适用于linux /BSD/Windows驱动
也就是说,wpa_supplicant是一个client侧使用的进程,它包含了802.1x、WPA的请求工作。
二. 源码安装指南
-
依赖库安装
依赖库源码地址:
http://ftp.gnu.org/gnu/bison/
https://linux.softpedia.com/get/Programming/Interpreters/Flex-23296.shtml
http://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz
https://www.openssl.org/source/ -
依赖库源码:
bison-3.2.tar.gz;flex-2.6.4.tar.gz; libnl-3.2.25.tar.gz ; openssl-1.1.1.tar.gz
依赖库安装说明:
前三个依赖库编译安装方法类似 :{- tar -xvf libnl-3.2.25.tar.gz || bison-3.2.tar.gz || flex-2.6.4.tar.gz
- cd libnl-3.2.25 || bison-3.2.tar.gz || flex-2.6.4.tar.gz
- ./configure --prefix=/usr/local/ || ./configure --prefix=/usr/local/tmp/ (linbn-3.2.25特定安装目录)
- make //编译
- make install
-
openssl 源码安装:
{
- 在文件夹下解压缩,执行如下命令:
a) tar -xzf openssl-1.1.1.tar.gz
b) 得到openssl-1.1.1文件夹。 - 进入解压目录,执行如下命令
i. cd openssl-1.1.1 - 设定Openssl 安装路径,( --prefix )参数为欲安装之目录,执行如下命令:
i. ./config --prefix=/usr/local/openssl - 执行命令./config -t
- 执行make,编译Openssl,编译需要等待一定的时间。
- 执行make install,安装 Openssl,安装也需要一定的时间。
}
- 在文件夹下解压缩,执行如下命令:
-
Wpa_supplicant 安装
1.解压
tar -xzf wpa_supplicant-2.6.tar.gz
cd wpa_supplicant-2.6/wpa_supplicant
2.编译与安装
#cp deconfig .config
Vi .config
修改.config,使能CONFIG_LIBNL32=y
修改Makefile ,加上libnl 和 opnssl的头文件 和 lib库。
CFLAGS += -I/usr/local/openssl/include
LIBS += -L/usr/local/openssl/lib
CFLAGS += -I/usr/local/tmp/include/libnl3
LDFLAGS += -L/usr/local/tmp/lib
将自带的defconfig改名为.config并编辑,打开如下选项:
CONFIG_LIBNL32=y
:wq
#make;
常见错误:
1.WPA_suppclient 错误
(1)
book@ubuntu:/wpa_supplicant/; make
/usr/bin/ld: cannot find -lnl
collect2: ld returned 1 exit status
make: *** [hostapd] Error 1
将自带的defconfig改名为.config并编辑,打开如下选项:
CONFIG_LIBNL32=y
原因:{
vi src/drivers/drivers.mk +38
发现下面这几句。
ifdef CONFIG_LIBNL32
DRV_LIBS += -lnl-3
DRV_LIBS += -lnl-genl-3
DRV_CFLAGS += -DCONFIG_LIBNL20 -I/usr/include/libnl3
那么我们只需要,在配置文件.config里,加
CONFIG_LIBNL32 = y 就可以了。
(2){
Package libnl-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libnl-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libnl-3.0' found
则需要将libnl-3.0.pc所在目录添加到PKG_CONFIG_PATH变量中,先用如下命令查看所在目录:
find / -name "libnl-3.0.pc"
/lib/pkgconfig/libnl-3.0.pc
在/etc/bash.bash的最后一行加:export PKG_CONFIG_PATH=/lib/pkgconfig/:$PKG_CONFIG_PATH
重启一次环境变量:source /etc/bash.bashrc
确认环境变量: echo $PKG_CONFIG_PATH
}
2.openssl 安装错误
{
/usr/bin/ld: cannot find -lcrypto
ll /usr/lib64/libssl*,得到
-rwxr-xr-x. 1 root root 242112 Jul 17 2012 /usr/lib64/libssl3.so
lrwxrwxrwx. 1 root root 15 Nov 30 01:31 /usr/lib64/libssl.so.10 -> libssl.so.1.0.0
-rwxr-xr-x. 1 root root 372488 Aug 23 2012 /usr/lib64/libssl.so.1.0.0
根本原因是,虽然有libssl的动态库文件,但没有文件名为 libssl.so 的文件,ld找不到它
于是添加软链接:
ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so
ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so
}
{
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 这是由于openssl库的位置不正确造成的。
解决方法:
在root用户下执行:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
}