移植wpa_supplicant软件与DHCP软件解密WPA/WPA2 加密的无线网络

加qq1126137994与微信:liu1126137994 一起学习更多技术!

现在的无线网络基本都是 WPA/WPA2 加密方式的,当我们在嵌入式Linux平台要实现无线网卡连接无线网时,我们需要一些工具来解密WPA/WPA2 加密方式的无线网。wpa_supplicant软件可以解密这种加密的网络,它同时提供相关的命令,供在Linux平台使用,当使用wpa_supplicant软件连接上无线网后,还需要DHCP软件来自动生成ip地址,这样才能正常的联网。wpa_supplicant软件还依赖于openssl库。

所以一共需要移植三个软件:wpa_supplicant-0.7.3,dhcp-3.1.3,openssl-0.9.8e
百度网盘下载地址:点击下载

移植 wpa_supplicant-0.7.3软件

1、首先解压wpa_supplicant-0.7.3,在解压得到的文件夹中找到patches目录,这里面存放的是openssl的补丁文件,里面有很多个补丁,也就是与wpa_supplicant-0.7.3匹配的openssl版本,可以在官方网站进行选择:点击下载。我这里选择的是openssl-0.9.8e版本。
2、知道了openssl的版本后,下载openssl并解压,把wpa_supplicant-0.7.3里面的patches文件夹下的openssl-0.9.8e-tls-extensions.patch文件拷贝到openssl-0.9.8e目录下,运行运行:patch –p1 <openssl-0.9.8e-tls-extensions.patch 这是打补丁的操作。
3、编译openssl
首先建立openssl的安装目录,建议安装在openssl-0.9.8e目录下,因为生成的库等只在交叉编译wpa_supplicant时使用,这样可以保持系统干净。我建立的目录是:openssl-imx6。

进入openssl-0.9.8e目录修改Makefile,修改如下(省略号代表其他位修改的内容):

INSTALLTOP=/home/zsl/work/system/wifi/openssl-0.9.8e/openssl-imx6
.....
OPENSSLDIR=/home/zsl/work/system/wifi/openssl-0.9.8e/openssl-imx6
....
CC= /home/zsl/work/system/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc
....
AR=/home/zsl/work/system/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= /home/zsl/work/system/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-ranlib

修改的部分根据自己的实际目录修改!

然后执行make和make install
会在openssl-imx6目录中生成我们移植wpa_supplicant需要的头文件和库文件。

4、编译wpa_supplicant
首先进入wpa_supplicant目录,建立配置文件:
cp defconfig .config
然后修改.config,增加以下内容:

CC=/home/zsl/work/system/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc -L/home/zsl/work/system/wifi/openssl-0.9.8e/openssl-imx6/libCFLAGS += -I/home/zsl/work/system/wifi/openssl-0.9.8e/openssl-imx6/includeLIBS += -L/home/zsl/work/system/wifi/openssl-0.9.8e/openssl-imx6/lib

CC是指定交叉编译链,并且通过-L指定刚刚编译好的openssl的库文件目录
CFLAGS是通过-I指定刚刚编译好的openssl的头文件目录

LIBS通过-L指定刚刚编译好的openssl的库文件目录
设置好了之后就可以保存退出
执行make

make后会在该文件夹下生成我们需要的二进制可执行文件,需要我们拷贝到开发板的/bin目录下。其中有3个需要拷贝的文件:
wpa_supplicant,wpa_cli,wpa_passphrase 这三个可执行文件就是我们生成的命令。将这三个文件想办法弄到开发板文件系统的/bin目录下。

5、编写wpa_supplicant.conf文件
首先说明这个文件,这个文件里面记录的是连接的各个无线网的信息,比如无线网的名字,密码,加密解密方式等,我们需要在这个文件里面先将我们想要连接的无线网的信息记录在内,以后方便连接。
配置文件加一项:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={ssid="iPhone6s"    #无线网名字,最好写成英文#key_mgmt=WPA-PSK    proto=WPApairwise=TKIP CCMPgroup=TKIP CCMP psk="liuyang123"   #无线网密码#
}

修改完成后就可以保存退出,将该文件想办法拷贝到开发板的/etc目录下。

6、移植DHCP软件
上述前五个步骤已经可以连接无线网,但是还需要一个DHCP工具来自动生成ip,才能正常使用!
先来移植DHCP软件:上述网盘中的文件dhcp-3.1.3.tar.gz拿到Linux系统解压
tar -zxvf dhcp-3.1.3.tar.gz
进入这个目录:
cd dhcp-3.1.3/
因为要编译Linux平台的。所以运行:
./configure linux
发现是有错误的:

System Type: linux  
No build directory for unknown - please run ./configure.  

这个地方纠结了很久,后来不经意间成功了,先不管上面的错误,直接进入到生成 的目录:
cd work.linux

然后:
make “CC=/home/zsl/work/system/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc -static”
会出错的,出错信息如下:

Making all in common  
make[1]: Entering directory `/home/ghye/Downloads/dhcp-3.1.3/work.linux/common'  
make[1]: *** No rule to make target `raw.o', needed by `libdhcp.a'.  Stop.  
make[1]: Leaving directory `/home/ghye/Downloads/dhcp-3.1.3/work.linux/common'  
make: *** [all] Error 1  

这个地方出错一直不知道怎么解决,后来发现,重新configure一下就好了:
../configure linux

这次configure 就没有出现上述configure 出现过的错误,具体原因不知道,然后再一次:
make “CC=/home/zsl/work/system/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc -static”

然后这次编译就顺利了,没有出现错误,看来始这个源码有bug!!!

将在work.linux/client目录下生成的dhclient可执行文件,将这个可执行文件拷贝到开发板文件系统的/usr/bin/下。

拷贝配置文件dhcp-3.1.3/client/dhclient.conf和/dhcp-3.1.3/client/scripts/linux 到开发板的/sbin/目录下,并将后一个文件重命名为dhclient-script 并修改该文件的第一行#! /bin/bash 为#! /bin/sh,保存后,修改权限 chmod +x /sbin/dhclient-script

到这一步软件的移植就完成了,接下来我们来使用移植好的软件来连接无线网!!!

7、连接网络

上面还忘了一件事,在开发板文件系统建立一个目录:
mkdir –p /var/run/wpa_supplicant

1、首先将之前移植好的无线驱动程序装载:
insmod rt5370sta.ko
2、启动网卡:
ifconfig wlan0 up
3、创建连接暗文密码(PSK密码),通过明码转换:
wpa_passphrase iPhone6s liuyang1234 >> /etc/wpa_supplicant.conf
此时将在wpa_supplicant.conf文件中生成:

network={ssid="iPhone6s"#psk="liuyang1234"psk=48cff49bf851d8e073040c6e2a6eaa176ac510faf3d69b6d0daf63aa2d68285f
}

4、然后修改wpa_supplicant.conf配置文件,把 psk=”liuyang123” 这一行明文密码改成生成的暗文密码,即改成:

network={ssid="iPhone6s"key_mgmt=WPA-PSKproto=WPApairwise=TKIP CCMPgroup=TKIP CCMPpsk=48cff49bf851d8e073040c6e2a6eaa176ac510faf3d69b6d0daf63aa2d68285f
}

5、连接AP
wpa_supplicant -iwlan0 -Dwext -c/etc/wpa_supplicant.conf &
(备注:如果使用的是我上一节中讲到的内核自带驱动,会出现一个rt2x00lib_request_firmware: Error - Failed to request Firmware.问题。
意思是找不到无线网卡的固件,这个问题很好解决,只需要在网卡驱动程序的common/目录下找到固件rt2870.bin,并放到开发板的/lib/firmware目录下即可。可以点击下载:点击下载)

显示大概如下的话,就是连接上了无线网:

Trying to associate with b6:6d:83:c4:a2:43 (SSID=’iPhone6s’ freq=2462 MHz)
Associated with b6:6d:83:c4:a2:43
WPA: Key negotiation completed with b6:6d:83:c4:a2:43 [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to b6:6d:83:c4:a2:43 completed (auth) [id=24 id_str=]

此时是还不能上网的,还需要我们用DHCP工具来动态分配ip,输入以下命令:
udhcpc -i wlan0

大概显示如下:
udhcpc (v1.20.2) started
Sending discover…
Sending select for 192.168.191.3…
Sending select for 192.168.191.3…
Lease of 192.168.191.3 obtained, lease time 3600
Deleting routers
adding dns 192.168.191.1
adding dns 114.114.114.114

则说明分配ip成功,当然你可以输入ifconfig wlan0 来查看是否分配了动态ip。

再来ping以下www.baidu.com
ping www.baidu.com

显示如下:

PING www.baidu.com (180.97.33.108): 56 data bytes
64 bytes from 180.97.33.108: seq=0 ttl=47 time=13.221 ms
64 bytes from 180.97.33.108: seq=1 ttl=47 time=15.429 ms
64 bytes from 180.97.33.108: seq=2 ttl=47 time=15.215 ms
64 bytes from 180.97.33.108: seq=3 ttl=47 time=14.273 ms
64 bytes from 180.97.33.108: seq=4 ttl=47 time=16.212 ms

— www.baidu.com ping statistics —
5 packets transmitted, 5 packets received, 0% packet loss

则说明我们的无线网已经可以正常联网了!!!!

6、连接其他AP
我们不可能只连接一个无线网,也不可能每次都修改配置文件来连接无线网,那样太麻烦了,那么该如何使用命令来快速连接无线网呢?

wpa_cli的用法:
首先运行wpa_supplicant服务,之后运行wpa_cli。
运行wpa_cli之后,会进入命令行交互模式,依次执行scan和scan_results可以显示搜索到的周围的AP信息。如下所示:
这里写图片描述

从中可以得到AP的MAC地址、信号强度以及加密方式等信息。
按下面的顺序依次执行指令,可以连接到加密方式为WPA-PSK/WPA2-PSK的AP:
add_network (会返回一个值,然后将这个值写到下面的26的位置)
set_network 26 ssid “LieBaoWiFi503”
set_network 26 psk “00000000”
enable_network 26

上述命令是添加一个可以连接的wifi信号,然后下面就可以连接了:
输入:
select_network 26

wpa_cli的其他命令模式:
list 可看到当前可连接的的wifi列表。

想一起探讨以及获得各种学习资源加我:
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xshell 连接不了 centos7

xshell 连接不了 centos7 采用的是net模式 有一段时间没有使用虚拟机了&#xff1a;今天打开后突然不能使用了&#xff0c;发现主机ping不通虚拟机了&#xff0c;而虚拟机可以正常联网&#xff0c;可以ping主机 查了一下 vmnet8 自动分配的 ipv4 和虚拟机 分配的网关地址没…

java多线程思维导图

分享是最好的整理&#xff0c;利用csdn 平台保存一下

【Makefile由浅入深完全学习记录7】Makefile中变量的高级主题下

加qq&#xff1a;1126137994 微信&#xff1a;liu1126137994 一起学习更多技术~ 继续上一篇文章关于变量的学习&#xff01; 1、环境变量&#xff08;全局变量&#xff09; -makefile中能够直接使用环境变量的值 如果makefile中定义了同名变量&#xff0c;则环境变量将被覆…

【Makefile由浅入深完全学习记录8】条件判断语句

加qq&#xff1a;1126137994 微信&#xff1a;liu1126137994 一起学习更多技术~ 今天来学习Makefile中条件判断语句&#xff01; Makefile也算是一门语言&#xff0c;它有自己的语法&#xff0c;那么它应该也会像C/C语言一样&#xff0c;支持条件判断语句&#xff01; Makef…

C语言实现位数组(bit数组)与位数组的简单应用举例

学习交流加&#xff08;可免费帮忙下载CSDN资源&#xff09;&#xff1a;个人微信&#xff1a; liu1126137994学习交流资源分享qq群1&#xff08;已满&#xff09;&#xff1a; 962535112学习交流资源分享qq群2&#xff1a; 780902027 今天有朋友遇到一个笔试题&#xff1a;一个…

【常见笔试面试算法题12】动态规划算法案例分析

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 文章目录1、暴力搜索方法2、记忆搜索方法3、动态规划方法4、各种动态规划方法案例总结&#xff1a;给定数组arr&#xff0c;arr中所有数都为正数&…

kafka 思维导图

最近在培训沟通力过程中&#xff0c;一句话说的特别好&#xff0c;有输入就要有输出&#xff0c;最近又学习了一遍kafka 给大家分享一下

【C++深度剖析教程28】C++对象模型分析

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 今天记录学习的内容是&#xff1a;C对象模型分析&#xff01;&#xff01;&#xff01; 本质分析&#xff1a; class是一种特殊的struct 在内存中cl…

【C++深度剖析教程29】C++对象模型分析下

加qq1126137994&#xff0c;微信&#xff1a;liu1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 今天来继续学习C对象模型&#xff01; 在C编译器内部&#xff0c;类可以理解为结构体子类是由父类成员叠加子类新成员得到的 下面来写一个程序分析C的继承…

java 思维导图

最近有时间&#xff0c;又整理了一下java 思维导图&#xff0c;持续优化中 子模块拆分总结&#xff1a;java基础 java思维导图 总结

【常见笔试面试算法题12续集一】动态规划算法案例1台阶问题练习题

加qq1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 以下问题&#xff0c;都可以用非动态规划的方法做&#xff0c;我为了整理动态规划的方法思路&#xff0c;就全部用动态规划的思路来解决问题&#xff0c;这样还可以简化问题的处理&#xff0c;是时间复杂…

linux 思维导图

工作中使用总结的linux 分享一下

【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题

加qq1126137994 一起学习更多技术&#xff01;&#xff01;&#xff01; 有一个矩阵map&#xff0c;它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走&#xff0c;最后到达右下角的位置&#xff0c;路径上所有的数字累加起来就是路径和&#xff0c;返回所有的…

mysql数据库思维导图

先前总结的一下数据库的思维导图&#xff0c;和大家分享一下&#xff0c;持续更新&#xff1b; 最近面试数据仓库工程师&#xff0c;过程中&#xff0c;问到索引类型&#xff0c;只是记得&#xff0c;普通索引&#xff0c;唯一索引&#xff0c;还有主键&#xff0c;面试中让说…

【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 这是一个经典的LIS(即最长上升子序列)问题&#xff0c;请设计一个尽量优的解法求出序列的最长上升子序列的长度。 给定一个序列arr及它的长度n(长度小…

【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 给定两个字符串A和B&#xff0c;返回两个字符串的最长公共子序列的长度。例如&#xff0c;A"1A2C3D4B56”&#xff0c;B"B1D23CA45B6A”&am…

hive 思维导图

1.整理了word文档&#xff0c;但是感觉没有思维导图清晰 &#xff0c;持续更新中 ​ hive 工作中分享。

结构思考力思维导图

个人提升&#xff0c;喜欢钻研的同时&#xff0c;需要增加一下&#xff0c;其他方面的知识&#xff0c;分享一下&#xff1a;

常用内存分配函数的说明

下面哪种C/C 分配内存的方法会将分配的空间初始化为0 A malloc() B calloc() C realloc() D new[ ] 1) malloc 函数&#xff1a; void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间&#xff0c;如果分配成功&#xff0c;则返回所分配…

前端学习(120):css精灵和好处

精灵图的目的&#xff1a;很多大型网站在首次加载的时候需要加载很多小图片&#xff0c;如果在同一时间&#xff0c;服务器又拥堵的话&#xff0c;就会导致页面加载慢。为了解决这一问题&#xff0c;就用了精灵图来解决加载时间过长影响用户体验的问题。 精灵图的本质&#xf…