移植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,一经查实,立即删除!

相关文章

Quartz实现定时功能 job.xml文件的配置

使用Quartz实现定时功能 Quartz是一个完全由java编写的开源作业调度框架,具体的介绍可到http://www.opensymphony.com/quartz/官方网站查看。 Quartz的几个核心的接口和类为&#xff1a; Job接口&#xff1a;自己写的“定时程序”实现此接口的void execute(…

xshell 连接不了 centos7

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

内存溢出和内存泄漏的区别、产生原因以及解决方案

内存溢出 out of memory&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现out of memory&#xff1b;比如申请了一个integer,但给它存了long才能存下的数&#xff0c;那就是内存溢出。 内存泄露 memory leak&#xff0c;是指程序在申请…

使用WebService与Oracle EBS进行集成(上)

一、概述 OracleEBS是Oracle公司的ERP产品&#xff0c;这个产品非常庞大&#xff0c;可以对企业的各个方面进行强大的管理功能&#xff0c;一般大型企业都会用到它的部分模块&#xff0c;根据公司的性质不同&#xff0c;选择的模块也会有所不同。对于生产型企业&#xff0c;所…

java多线程思维导图

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

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

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

如何在数据表中存取图片 - 回复 三足乌 的问题

问题来源: http://www.cnblogs.com/del/archive/2009/05/28/1491186.html#1801853准备工作:1、在空白窗体上添加: ClientDataSet1、Button12、激活窗体的 OnCreate 事件、激活 Button1 的 OnClick 事件实现代码:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants…

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

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

七个小矮人

有七个大的目标&#xff1a; 1&#xff0c;场景编辑器和模型编辑器 ---场景编辑器在网络上有很多&#xff0c;主要是提供给美术设定一个完整的场景&#xff0c;让美术把场景的各个方面都诶放进来。这个就以流行的实现就好了 -----标准就是实现换装&#xff0c;动作融合和更改 …

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

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

数据仓库和数据集市 专业术语解释

数据仓库&#xff1a;数据标准化的数据集&#xff08;标准化数据库设计会使数据拆分成最低的粒度&#xff09; 实数仓库&#xff1a;常使用关系模型 &#xff08;关系模型和关系数据库设计的权威著作参考&#xff1a;Ted Codd 和ChristDate的书籍&#xff09; 数据集市&#x…

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

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

CSS命名规范(建议版)(转)

容 器&#xff1a;container/box 头 部&#xff1a;header 主 导 航&#xff1a;mainNav 子 导 航&#xff1a;subNav 顶 导 航&#xff1a;topNav 网站标志&#xff1a;logo 大 广 告&#xff1a;banner 页面中部&#xff1a;mainBody 底 部&#xff1a;footer 菜 …

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…

.Net Excel 部分操作

range.NumberFormatLocal ""; //设置单元格格式为文本 range (Range)worksheet.get_Range("A1", "E1"); //获取Excel多个单元格区域&#xff1a;本例做为Excel表头 range.Merge(0); //单元格合并动作 worksheet.Cells[1, 1] &…

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

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

java 思维导图

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

ASP.NET页面揭秘之页面生命周期【转】

首先简单介绍下Page类。 在.NET Framework中&#xff0c;Page类提供了ASP.NET应用程序从.aspx文件开始创建的所有对象的基本行为。Page类在System.Web.UI命名空间中定义&#xff0c;它派生于TemplateControl类并实现了IHttpHandler接口。TemplateControl类是一个抽象类&#xf…

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

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