十分钟让你明白Wpa supplicant是什么
wpa_supplicant用法
wpa_supplicant用法wpa_supplicant是一款针对无线局域网(WLAN)和安全体系的客户端应用,用于连接Wireless (Wi-Fi) 基站。
它主要用于实现802.11i认证,兼容各种安全模式,包括WPA/WPA2和EAP。
wpa_supplicant的使用非常简单,只需要执行下面的指令即可:sudo wpa_supplicant -D nl80211,wext -c <path to configuration file> -i <wireless device>其中,-D参数指定的是驱动的标识,-c参数指定的是配置文件地址,-i参数指定的是无线设备标识。
配置文件是wpa_supplicant最重要的部分,其中包含了路由器信息以及连接方式、加密方式等内容。
配置文件的格式类似于INI,可以从/etc/wpa_supplicant.conf获得参考:network={ssid="myrouter"psk="mypassword"proto=WPAkey_mgmt=WPA-PSK}其中,ssid指定的是路由器的SSID,psk指定的是密码,proto指定的是加密方式,key_mgmt指定的是连接方式。
另外,wpa_supplicant还支持各种安全认证方法,如802.1X认证、TLS认证、PEAP认证等,可以参考官方文档来了解具体内容。
最后,可以使用wpa_cli命令行工具进行管理和配置wpa_supplicant,比如可以使用scan命令来扫描可用的Wi-Fi网络,也可以使用reconfigure命令来重新配置wpa_supplicant,让它能够正常的工作。
Linux系统Wpa_supplicant用法小结
Linux系统Wpa_supplicant⽤法⼩结Wpa_supplicant是linux系统下⼀个⾮常强⼤的⽆线⽹卡管理程序。
google搜索到的它似乎不⽀持WPA2和AES,其实不然,参考它的⽂档可以发现,WPA2只是RSN的别名,⽽AES也是CCMP的⼀部分,所以它们的⽀持完全是没有问题的。
它的⽂档看起来⾮常复杂,其实配置⾮常简单,下⾯先给出我的wpa_supplication.conf[python]1. ctrl_interface=/var/run/wpa_supplicant2. ctrl_interface_group=wheel3. update_config=14.5. network={6. ssid="xxxx"7. scan_ssid=18. psk=xxxxxxxxx37bca5cf24a345f514d319211822f568bba28f8f0b74c894e76449. proto=RSN10. key_mgmt=WPA-PSK11. pairwise=CCMP12. auth_alg=OPEN13. }解释⼀下上⾯的⽐较容易困惑的地⽅:签名三句应该是个模板,没仔细研究过。
network=开始是⽆线接⼊点的具体配置,⼀般的⽆线接⼊点可以⽤wpa_passphrase来⾃动⽣成,语法是[python]1. yj@YJ_N ~ $ wpa_passphrase2. usage: wpa_passphrase <ssid> [passphrase]3.4. If passphrase is left out, it will be read from stdin5.6. 接下来看个实例:7.8. yj@YJ_N ~ $ wpa_passphrase TPLINK 123456789. network={10. ssid="TPLINK"11. #psk="12345678"12. psk=992194d7a6158009bfa25773108291642f28a0c32a31ab2556a15dee97ef0dbb13. }14. 这⾥表⽰名为TPLINK的接⼊点,密码是12345678,输出就是该接⼊点在wpa_supplicant.conf⾥⾯的配置内容,可以直接⽤下⾯的命令⾃动写⼊15.16. yj@YJ_N ~ $ wpa_passphrase TPLINK 12345678 |sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf继续解释最开始的例⼦,network=后⾯的内容ssid :接⼊点名称,这个没什么好说的scan_ssid=1 :这个很容易错过,如果你的⽆线接⼊点是隐藏的,那么这个就是必须的,亲⾝经历,折腾了好久才搞定,记之备忘。
wpa_cli的用法
wpa_cli的用法wpa_cli是一个用于与Linux系统中的wpa_supplicant进行交互的命令行工具。
wpa_supplicant是一个用于管理无线网络连接的后台程序,而wpa_cli则允许用户通过命令行界面来控制wpa_supplicant的行为。
首先,wpa_cli的基本用法是在命令行中输入"wpa_cli"来启动交互式会话。
在这个会话中,用户可以输入不同的命令来执行各种操作,例如扫描可用的无线网络、连接到特定的网络、断开连接、查看连接状态等等。
下面我会逐个介绍一些常用的wpa_cli命令及其用法:1. 扫描可用的无线网络:输入命令 "scan",wpa_supplicant将会开始扫描附近的无线网络,并将扫描结果返回给用户。
2. 查看扫描结果:输入命令 "scan_results",wpa_supplicant将返回最近一次扫描的结果,包括每个发现的网络的SSID、信号强度、加密方式等信息。
3. 连接到无线网络:输入命令 "add_network",wpa_supplicant将会创建一个新的网络配置,并返回该网络的network ID。
然后使用命令"set_network <network_id> ssid "<SSID>"" 和 "set_network <network_id> psk "<password>"" 来设置要连接的网络的SSID和密码,最后使用 "enable_network <network_id>" 命令来连接到该网络。
4. 查看当前连接状态:输入命令 "status",wpa_supplicant将返回当前连接的网络的状态,包括SSID、BSSID、信号强度、IP地址等信息。
无线加密地多种方法及其区别WEPWPATKIPEAP
无线加密的多种方法及其区别(WEP WPA TKIP EAP)无线网络的安全性由认证和加密来保证。
认证允许只有被许可的用户才能连接到无线网络;加密的目的是提供数据的保密性和完整性(数据在传输过程中不会被篡改)。
802.11标准最初只定义了两种认证方法:开放系统认证(Open System Authentication)共享密钥认证(Shared Key Authentication)以及一种加密方法:有线等效保密(Wired Equivalent Privacy –WEP)对于开放系统认证,在设置时也可以启用WEP,此时,WEP用于在传输数据时加密,对认证没有任何作用。
对于共享密钥认证,必须启用WEP,WEP不仅用于认证,也用于在传输数据时加密。
WEP使用对称加密算法(即发送方和接收方的密钥是一致的),WEP使用40位或104位密钥和24位初始化向量(Initialization Vector –IV,随机数)来加密数据。
注:使用初始化变量(IV)的目的是避免在加密的信息中出现相同的数据。
例如:在数据传输中,源地址总是相同的,如果只是单纯的加密(WEP使用静态密码),这样在加密的信息中会出现相同的数据,有可能被恶意地破解。
由于初始化变量(IV)是随机数,可以避免这种情况的出现。
在配置无线网络的安全性时,一般将40位/104位密钥写成密钥长度:64位(40+24)/128位(104+24)由于WEP有一些严重缺陷,如初始化向量的范围有限,而且是使用明文传送……,802.11使用802.1x来进行认证、授权和密钥管理,另外,IEEE开始制订802.11i标准,用于增强无线网络的安全性。
同时,Wi-Fi联盟与IEEE一起开发了Wi-Fi受保护的访问(Wi-Fi Protected Access –WPA)以解决WEP的缺陷WPAWPA不同于WEP,WPA同时提供认证(基于802.1x可扩展认证协议–Extensible Authentiation Protocl - EAP的认证)和加密(临时密钥完整性协议–Temporal Key Integrity Protocol –TKIP)。
wpa_supplicant移植和配置
自己移植wpa_supplicantlicant经验参考两篇博客/wesleyluo/article/details/8104665/lin772662623/article/details/78303361.3 安装openssl ;make install安装后可以生成一些目录,在编译wpa_supplicant的时候会用到。
如下:/usr/local/ssl/include/usr/local/ssl/lib2. 编译wpa_supplicant2.1 创建配置文件,这里创建默认的配置文件:cp defconfig .config2.2 编译,命令很简单,进入wpa_supplicant目录后执行make。
会出现一堆错误说找不到一系列东西。
解决办法:在.config文件中找到# Uncomment following two lines and fix the paths if you have installed OpenSS的一段。
添加如下内容:CFLAGS += -I/usr/local/ssl/includeLIBS += -L/usr/local/ssl/lib重新make,发现wpa_supplicant的二进制文件编译出来了。
但是还是有错误。
编译wpa_passphrase出错。
(默认make会编译出三个二进制文件,分别是wpa_supplicant,wpa_passphrase和wpa_cli)解决办法:继续在上面提到的地方添加:LIBS_p += -L/usr/local/ssl/lib重新编译。
OK,编译通过,在wpa_supplicant-0.6.10/wpa_supplicant目录下可以看到编译出的三个二进制文件嵌入式的因为现在的无线wifi网络大多是wpa加密。
所以需要移植wpa_supplicant工具。
一、下载源码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下载/source/openssl-0.9.8e.tar.gz#tar zxvf openssl-0.9.8e.tar.gz二、编译openssl库将wpa_supplicant中的补丁拷贝到openssl中# cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patchopenssl-0.9.8e/#cd openssl-0.9.8e#mkdir /usr/local/ssl#vim MakefileCC= arm-linux-gnu-gccAR= arm-linux-gnu-ar $(ARFLAGS) rRANLIB= arm-linux-gnu-ranlibINSTALLTOP=/usr/local/sslOPENSSLDIR=/usr/local/ssl#make#make install在/usr/local/ssl目录下安装了ssl库#ls /usr/local/ssl#bin certs include lib man misc f private后面编译wpa_supplicant要依赖openssl中的lib和include三、编译wpa_supplicant进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:#cp defconfig .config#vim .configCC= arm-linux-gnu-gcc -L/usr/local/ssl/lib/CFLAGS += -I/usr/local/ssl/include/LIBS += -L/usr/local/ssl/lib/#make经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。
WPASupplicantwpa_cli设置连接断开通知
WPASupplicantwpa_cli设置连接断开通知本文译至:wpa_supplicant是跨平台的WPA supplicant,支持WEP, WPA 和 WPA2 (IEEE 802.11i / RSN (Robust Secure Network)). 可以在桌面、笔记本甚至嵌入式系统中使用。
wpa_supplicant是在客户端使用的 IEEE 802.1X/WPA 组件,支持与WPA Authenticator 的交互,控制漫游和无线驱动的IEEE 802.11 验证和关联。
安装从官方软件仓库中安装软件包wpa_supplicant。
此外软件包 wpa_supplicant_gui 提供了图形界面wpa_gui。
启动本节介绍启动wpa_supplicant的常用方法,选择一个最适合你的。
systemdwpa_supplicant提供多种服务的文件:•wpa_supplicant.service - 使用D-Bus, 推荐NetworkManager的用户.•wpa_supplicant@.service - 接受接口名作为参数,并为该接口启动wpa_supplicant守护进程。
它读取/etc/wpa_supplicant/wpa_supplicant-interface.conf的配置文件•wpa_supplicant-nl80211@.service - 也是接口特定的,但明确强制nl80211驱动程序 (见下文). 配置文件路径是/etc/wpa_supplicant/wpa_supplicant-nl80211-interface.conf •wpa_supplicant-wired@.service - 也是接口特定的, 使用 wired 驱动. 配置文件路径是/etc/wpa_supplicant/wpa_supplicant-wired-interface.conf dhcpcddhcpcd包含了一个钩子(默认为启用)来自动启动对应无线接口的wpa_supplicant。
linux使用wpa_supplicant手动配置wifi
linux使⽤wpa_supplicant⼿动配置wifi简介wpa_supplicant是⼀个连接、配置WIFI的⼯具,它主要包含wpa_supplicant与wpa_cli两个程序。
通常情况下,可以通过wpa_cli来进⾏WIFI的配置与连接,如果有特殊的需要,可以编写应⽤程序直接调⽤wpa_supplicant的接⼝直接开发。
启动wpa_supplicant应⽤$ wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B/etc/wpa_supplicant.conf⽂件⾥,添加下⾯代码:ctrl_interface=/var/run/wpa_supplicantupdate_config=1启动wpa_cli应⽤$ wpa_cli -i wlan0 scan // 搜索附近wifi⽹络$ wpa_cli -i wlan0 scan_result // 打印搜索wifi⽹络结果$ wpa_cli -i wlan0 add_network // 添加⼀个⽹络连接如果要连接加密⽅式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] (wpa加密),wifi名称是name,wifi密码是:psk。
$ wpa_cli -i wlan0 set_network 0 ssid '"name"'$ wpa_cli -i wlan0 set_network 0 psk '"psk"'$ wpa_cli -i wlan0 enable_network 0如果要连接加密⽅式是[WEP][ESS] (wep加密),wifi名称是name,wifi密码是psk。
$ wpa_cli -i wlan0 set_network 0 ssid '"name"'$ wpa_cli -i wlan0 set_network 0 key_mgmt NONE$ wpa_cli -i wlan0 set_network 0 wep_key0 '"psk"'$ wpa_cli -i wlan0 enable_network 0如果要连接加密⽅式是[ESS] (⽆加密),wifi名称是name。
wpa_supplicant使用笔记
wpa_supplicant使⽤笔记还在搞8634,看不到头了。
唉。
wireless_tools的缺点是不⽀持WPA认证,所以有必要把wpa_supplicant也移植过来。
⽆线⽹卡是基于zydas芯⽚的,正好可以在⽹上搜到wpa_supplicant的zydas专⽤包:wpa_supplicant- 0.4.7_zydas_pre3.tar.gz移植很简单,解包直接修改Makefile,把CC改成mipsel-linux-gcc,然后编译直接通过。
编译完成后可以发现有⼏个可执⾏程序:wpa_supplicant,wpa_cli等。
wpa_supplicant是核⼼程序,它和wpa_cli的关系就是服务和客户端的关系:后台运⾏wpa_supplicant,可以使⽤wpa_cli来搜索、设置、和连接⽹络等,⼤部分情况下编辑好配置⽂件,运⾏wpa_supplicant 就可以连通⽹络了,创建⼀个wpa_supplicant.conf,键⼊以下内容:#可有可⽆,没有的话⽆法⽤wpa_cli terminate来关闭wpa_supplicantctrl_interface=/var/run/wpa_supplicant# 确保只有root⽤户能读取WPA的配置,可有可⽆,尤其是在嵌⼊式设备上ctrl_interface_group=0# 使⽤wpa_supplicant来扫描和选择AP,也可以设置成0或2,但只有1才能正确⼯作ap_scan=1network={#AP的名字ssid="my_network"#AP的keypsk="my_key"}wpa_supplicant执⾏时会在/data/system/wpa_supplicant⽬录下创建eth1⽂件,所以就能unix通信了下载地址:http://hostap.epitest.fi/releases/。
Linuxiwconfig和wpa_supplicant管理无线网卡
Linuxiwconfig和wpa_supplicant管理无线网卡笔记本只安装了debian基本系统,没有图形界面。
基本系统只支持有线网络上网,由于在家只有无线网络,需要进行一些配置才能连接网络,进而安装整个系统。
下面为配置全过程,注意,配置过程中需要一台能联网的电脑,下载安装包。
debian/lenny系统查看 /lib/firmware/是否存在固件 iwlwifi-*.ucode如果没有就安装:firmware-iwlwifi_0.14+lenny2_all.deb查看是否存在命令 iwlist/iwconfig/wpa_supplicant如果不存在就安装:wireless-tools_29-1.1_amd64.deb/wpasupplicant_0.6.4-3_amd64.deb可能会要求安装依赖包,按要求把包装上(我的是64位系统)目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。
请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。
wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。
请浏览wpa_supplicant网站获得它所支持的驱动列表。
另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。
wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。
wireless-tools方式(支持很多无线网卡,仅能访问WEP加密AP)1. 找到无线网卡接口(假设为wlan0):ifconfig -a2. 启动无线网卡:ifconfig wlan0 up3. 扫描AP(假设为MYESSID):iwlist wlan0 scanning4. 配置MYESSID:iwconfig wlan0 essid MYSSID5. 密码:iwconfig wlan0 key s:xxxxx/xxxxxxxxxxxxx(40-bit 为5个ASSIC字符,128-bit为13个ASSIC字符,以字符为密钥时,密钥之前需要加s:表示字符)wpa_supplicant方式(支持少量无线网卡,能访问WPA加密AP)1. 增加配置文件/etc/wpa_supplicant/wpa_supplicant.conf:(WPA_PSK加密方式)内容ctrl_interface=/var/run/wpa_supplicantnetwork={ssid="MYESSID"psk="mimamima"priority=5}更详细的配置可参考手册man wpa_supplicant.conf2. 运行wpa_supplicant:wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0更详细的选项可参考手册man wpa_supplicant------------------------------------------------------------------------------------------------------------------wicd无线和有线管理工具Wicd是一个适用于 Linux 系统的无线网络连接管理器。
wpa-suppicant介绍
wpa-suppicant介绍本来以为这个东西只有在Atheros的平台上用的,突然发现Ralink的平台也可以用,甚至还看到还有老美把这个东西往android 上移植。
看来是个好东西,学习一下。
官方的模块框图一般来说很多模块可以根据需要选用的EAP methods EAP state machine如果你不需要支持wpa-enterprise那么这两个模块都不需要编译。
wpa_cli和GUI这两个可以不要,直接写个控制脚本,把用户的参数变为配臵文件,重启wpa_supplicantdriver eventdriver event 无线驱动和本程序通讯的接口,一般高级的无线驱动都支持WEXT。
就是驱动里面通过wireless_send_event把一些状态信息发到本程序处理。
driver i/f一些ioctl接口,同样用于无线驱动和本程序之间传递信息。
EAPOL state machine负责处理PTK 4-way HS和GTK 2-way HSl2_packageEAPOL和pre auth都要通过这个接口收发包。
configuration负责处理用户配臵文件的模块大致流程(For WPA-PSK):1读取配臵文件2初始化配臵参数,驱动函数wrapper3让驱动scan当前所有bssid(包括wpa AP和non-wpa AP)4检查扫描的参数是否和用户设臵的相符5如果相符,设臵associate request ie 通知驱动进行auth assoc 步骤4 Four-way handshake for PTK5 Two-way handshake for GTK6接收AP发出的指令,定期更换GTK这个程序和madwifi通信主要通过wirelessEXT,其实就是netlink,在madwifi驱动中会调用wireless_event_send这个函数把相关的东西发到wpa_supplicantWPA-PSK配臵文件的写法一般这样写可以兼容WPA和WPA2 CCMP和TKIPnetwork={ssid="myssid "key_mgmt=WPA-PSKproto=WPA RSNpairwise=TKIP CCMPpsk="myasciipsk"}编译方法:Makefile需要读取一个.config文件,这个文件里面包含交叉编译路径设臵,模块配臵选项。
linux下WIFI模块使用:wpa_supplicant工具交叉编译以及配置
linux下WIFI模块使⽤:wpa_supplicant⼯具交叉编译以及配置安装依赖库openssl源码下载:https:///openssl/openssl/releases/tag/OpenSSL_1_1_1b1) 配置cd /root/wifitar -xvf openssl-OpenSSL_1_1_1b.tar.gzcd openssl-OpenSSL_1_1_1b/./config shared no-asm --prefix=$PWD/build./config表⽰根据后⾯的编译选项⽣成⼀Makefile⽂件,“shared”表⽰⽣成共享库;“no-asm”表⽰去掉汇编部分;“–prefix=”后⾯跟着⽣成的项⽬所存放的路径。
2)修改Makefile:PLATFORM=arm-linuxCROSS_COMPILE=arm-linux-CNF_CFLAGS=-pthreadCNF_CXXFLAGS=-std=c++11 -pthread3)编译&&安装makemake install编译安装后在/root/wifi/openssl-OpenSSL_1_1_1b/build/lib/⽬录内容如下:# ls /root/wifi/openssl-OpenSSL_1_1_1b/build/lib/engines-1.1 libcrypto.a libcrypto.so libcrypto.so.1.1 libssl.a libssl.so libssl.so.1.1 pkgconfig4) 复制库⽂件到开发板⽂件系统/usr/lib⽬录下这⾥需要注意的是,拷贝时使⽤cp -rf,连同软链接⼀起拷贝。
交叉编译wpa_supplicant源码下载:http://w1.fi/wpa_supplicant/下载最新版本:http://w1.fi/releases/wpa_supplicant-2.9.tar.gz1)创建⼀个.config⽂件cd /root/wifi/tar -xvf wpa_supplicant-2.9.tar.gzcd wpa_supplicant-2.9/wpa_supplicantcp defconfig .config2) 修改.config⽂件修改如下部分:# Additional directories for cross-compilation on Linux host for mingw target#CFLAGS += -I/opt/mingw/mingw32/include/ddk#LIBS += -L/opt/mingw/mingw32/lib#CC=mingw32-gcc为# Additional directories for cross-compilation on Linux host for mingw targetCFLAGS += -I/root/wifi/openssl-OpenSSL_1_1_1b/build/includeLIBS += -L/root/wifi/openssl-OpenSSL_1_1_1b/build/libCFLAGS += -I/root/wifi/libnl-3.2.23/build/includeLIBS += -L/root/wifi/libnl-3.2.23/build/libCC=arm-linux-gccCFLAGS为编译安装好的openssl的include⽬录和 libnl的include⽬录LIBS为编译安装好的openssl的lib⽬录和 libnl的include⽬录CC为交叉编译⼯具libnl库的交叉编译见:3)添加环境变量export PKG_CONFIG_PATH=/root/wifi/libnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH4)编译执⾏make后会出现以下错误:dbus/dbus_dict_helpers.c:10:23: warning: dbus/dbus.h: No such file or directoryIn file included from dbus/dbus_dict_helpers.c:14:修改.config⽂件,注释掉以下两个选项:#CONFIG_CTRL_IFACE_DBUS_NEW=y#CONFIG_CTRL_IFACE_DBUS_INTRO=y继续执⾏make,⼜出现如下错误:../src/drivers/driver_wext.c: In function'wpa_driver_wext_set_key_ext':../src/drivers/driver_wext.c:1780: error: 'IW_ENCODE_ALG_AES_CMAC' undeclared (first use in this function)../src/drivers/driver_wext.c:1780: error: (Each undeclared identifier is reported only once../src/drivers/driver_wext.c:1780: error: for each function it appears in.)../src/drivers/driver_wext.c: In function'wpa_driver_wext_associate':../src/drivers/driver_wext.c:2215: error: 'IW_AUTH_MFP_DISABLED' undeclared (first use in this function)../src/drivers/driver_wext.c:2218: error: 'IW_AUTH_MFP_OPTIONAL' undeclared (first use in this function)../src/drivers/driver_wext.c:2221: error: 'IW_AUTH_MFP_REQUIRED' undeclared (first use in this function)../src/drivers/driver_wext.c:2224: error: 'IW_AUTH_MFP' undeclared (first use in this function)Makefile:1990: recipe for target '../src/drivers/driver_wext.o' failed解决办法:在kernel源码⾥搜索上述宏:grep"IW_ENCODE_ALG_AES_CMAC" * -nR /root/linux-3.4.2得到以下内容:/root/linux-3.4.2/include/linux/wireless.h:626:#define IW_ENCODE_ALG_AES_CMAC 5/root/linux-3.4.2/net/wireless/wext-compat.c:699: case IW_ENCODE_ALG_AES_CMAC:在/root/linux-3.4.2/include/linux/wireless.h⾥找出上述未定义的⼏个宏,添加到../src/drivers/driver_wext.c的开头。
关于XXwpa2无线网络密码的方法
关于XXwpa2无线网络密码的方法在动手破解WPA/WPA2前,应该先了解一下基础知识,本文适合新手阅读首先大家要明白一种数学运算,它叫做哈希算法(hash).这是一种不可逆运算,你不能通过运算结果来求解出原来的数是多少,有时我们还需要不同的数通过该算法计算后得到的结果不能相同,即你不太可能找到两个不同的值通过哈希得到同一个结果。
哈希是一类算法的统称(暂停!移动你的鼠标-猛击右图?),通常哈希算法都是公开的,比如MD5,SHA-1等等。
我们平时说的WPA密码其实叫PSK(pre-shared key),长度一般是8-63字节,它加上ssid通过一定的算法可以得到PMK(pairwise master key)。
PMK=SHA-1(ssid,psk) ,PMK的长度是定长的,都是64字节。
由于计算PMK的过程开销比较大,是我们破解花费时间长的关键,所以采用以空间换时间的原则把PMK事先生成好,这个事先生成好的表就是常说的HASH表(生成PMK的算法是一种哈希),这个工作就是用airlib-ng这个工具来完成的,我们的快速破解就是这么来的。
认证的时候会生成一个PTK(pairwise temporary),这是一组密钥,具体细节不详细说了,它的生成方法也是采用的哈希,参数是连接的客户端MAC地址、AP的BSSID、A-NONCE、S-NONCE、PMK,其中A-NONCE和S-NONCE是两个随机数,确保每次连接都会生成不同的PTK。
PTK的计算消耗很小。
PTK加上报文数据采用一定的算法(AES 或TKIP),得到密文,同时会得到一个签名,叫做MIC(message integrality check),tkip之所以被破解和这个mic有很大关系。
四次握手包中含有以上的哪些东西呢?客户端的MAC地址,AP的BSSID,A-NONCE,S-NONE,MIC,最关键的PMK和PTK是不包含在握手包里的!认证的原理是在获得以上的所有参数后,客户端算出一个MIC,把原文连同MIC一起发给AP,AP采用相同的参数与算法计算出MIC,并与客户端发过来的比较,如果一致,则认证通过,否则失败。
wpa_supplicant的用法
wpa_supplicant的用法(1)通过adb命令行,可以直接打开supplicant,从而运行wpa_cli,可以解决客户没有显示屏而无法操作WIFI的问题,还可以避免UI的问题带到driver。
进一步来说,可以用在很多没有键盘输入和LCD输出的安卓终端产品的操作上。
wpa_supplicant包含两个主要的可执行工具:wpa_supplicant和wpa_cli。
wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
(2)在wpa_cli交互模式下可以执行很多命令,列表如下:A,首先保证ADB连入,且能运行adb remount,这样避免系统文件只读。
然后设置wpa_cli和wpa_supplicant有较强权限。
B,运行echo 1 > /dev/wmtWifi,启动WIFI驱动。
但是这个使能不会表现在安卓界面上层,默认是要在启动安卓时开启WIFI模块的,也即设置中的WIFI要默认ON。
C,进入/system/bin目录,首先运行服务端wpa_supplicant。
./wpa_supplicant -iwlan0 -Dnl80211 -c/system/etc/wifi/wpa_supplicant.conf正常启动后的回显如下:不可收入态表明该服务端已经在运行了(也可能是可输入状态,只要后面的wpa_cali可连接就行)。
-i -D -c的参数意义可直接在Help中查询,具体有些参数可能因平台不同而有差异。
D,另开启一个ADB SHELL,作客户端运行wpa_cali。
如下:cd /system/binwpa_cli -p /data/misc/wpa_supplicant回显如下说明正常并处于交互模式:E,执行一系列命令看看scanscan_resultsF,连WIFI的命令行,有以下几种:for AP that doesn`t have encryption>add_network (It will display a network id for you, assume it returns 0)>set_network 0 ssid “666”>set_network 0 key_mgmt NONE>enable_network 0>quitfor AP that has WEP>add_network (assume returns 1)>set_network 1 ssid “666”>set_network 1 key_mgmt NONE>set_network 1 wep_key0 “your ap passwork”(if usting ASCII, it need double quotation marks, if using hex, then don`t need the double quotation marks)>set_network 1 wep_tx_keyidx 0>select_network 1 (optional, remember, if you are connecting with another AP, you should select it to disable the another)>enable_network 1for AP that has WPA-PSK/WPA2-PSK>add_network (assume returns 2)>set_network 2 ssid “666”>set_network 2 psk “your pre-shared key”>select_network 2 (optional, remember, if you are connecting with another AP, you should select it to disable the another)>enable_network 2我自己的实验图如下:以上过程就说明联网OK,可以上网了。
wpa_supplicant的用法
wpa_supplicant的用法(1)通过adb命令行,可以直接打开supplicant,从而运行wpa_cli,可以解决客户没有显示屏而无法操作WIFI的问题,还可以避免UI的问题带到driver。
进一步来说,可以用在很多没有键盘输入和LCD输出的安卓终端产品的操作上。
wpa_supplicant包含两个主要的可执行工具:wpa_supplicant和wpa_cli。
wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
(2)在wpa_cli交互模式下可以执行很多命令,列表如下:A,首先保证ADB连入,且能运行adb remount,这样避免系统文件只读。
然后设置wpa_cli和wpa_supplicant有较强权限。
B,运行echo 1 > /dev/wmtWifi,启动WIFI驱动。
但是这个使能不会表现在安卓界面上层,默认是要在启动安卓时开启WIFI模块的,也即设置中的WIFI要默认ON。
C,进入/system/bin目录,首先运行服务端wpa_supplicant。
./wpa_supplicant -iwlan0 -Dnl80211 -c/system/etc/wifi/wpa_supplicant.conf正常启动后的回显如下:不可收入态表明该服务端已经在运行了(也可能是可输入状态,只要后面的wpa_cali可连接就行)。
-i -D -c的参数意义可直接在Help中查询,具体有些参数可能因平台不同而有差异。
D,另开启一个ADB SHELL,作客户端运行wpa_cali。
如下:cd /system/binwpa_cli -p /data/misc/wpa_supplicant回显如下说明正常并处于交互模式:E,执行一系列命令看看scanscan_resultsF,连WIFI的命令行,有以下几种:for AP that doesn`t have encryption>add_network (It will display a network id for you, assume it returns 0)>set_network 0 ssid “666”>set_network 0 key_mgmt NONE>enable_network 0>quitfor AP that has WEP>add_network (assume returns 1)>set_network 1 ssid “666”>set_network 1 key_mgmt NONE>set_network 1 wep_key0 “your ap passwork”(if usting ASCII, it need double quotation marks, if using hex, then don`t need the double quotation marks)>set_network 1 wep_tx_keyidx 0>select_network 1 (optional, remember, if you are connecting with another AP, you should select it to disable the another)>enable_network 1for AP that has WPA-PSK/WPA2-PSK>add_network (assume returns 2)>set_network 2 ssid “666”>set_network 2 psk “your pre-shared key”>select_network 2 (optional, remember, if you are connecting with another AP, you should select it to disable the another)>enable_network 2我自己的实验图如下:以上过程就说明联网OK,可以上网了。
Wifi模块分析_android
Wifi模块分析博客分类:Android转自:/ylyuanlu/article/details/6622943最近研究Wifi模块,查了不少的相关资料,但发现基本上是基于android2.0版本的的分析,而现在研发的android移动平台基本上都是 2.3的版本,跟2.0版本的差别,在Wifi模块上也是显而易见的。
2.3版本Wifi模块没有了WifiLayer,之前的WifiLayer主要负责一些复杂的Wifi功能,如AP选择等以提供给用户自定义,而新的版本里面的这块内容基本上被WifiSettings所代替。
本文就是基于android2.3版本的Wifi分析,主要分为两部分来分别说明:(1) Wifi模块相关文件的解析(2) Wpa_supplicant解析(3) Wifi的启动流程(有代码供参考分析)一,Wifi模块相关文件解析1) wifisettings.javapackages/apps/Settings/src/com/android/settings/wifiwifisettings.java该类数据部分主要定义了下面几个类的变量:{private final IntentFilter mFilter;//广播接收器,用来接收消息并做响应的处理工作privatefinal BroadcastReceiver mReceiver;//这是一个扫描类,会在用户手动扫描 AP时被调用privatefinal Scanner mScanner;private WifiInfo mLastInfo;//服务代理端,作为WifiService对外的接口类呈现privateWifiManager mWifiManager;//这个类主要实现Wifi的开闭工作privateWifiEnabler mWifiEnabler;//APprivate AccessPoint mSelected;private WifiDialog mDialog;……}wifiSettings类的构造函数的主要工作:定义了一个IntentFilter (Intent过滤器)变量,并添加了六个动作,(了解 Android的intent机制的同学都知道什么意思,不明白的同学参考Intent机制的资料)接着定义一个广播接收器,并有相应的消息处理函数,下面是该构造函数的定义:public WifiSettings() {mFilter = new IntentFilter();//intent机制中的intent消息过滤器,下面添加可以处理的动作mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); mFilter.addAction(WORK_IDS_CHANGED_ACTION);mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); mFilter.addAction(WORK_STATE_CHANGED_ACTION); mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);//注册了广播接收器,用来处理接收到的消息事件mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context,Intent intent) { handleEvent(intent); //事件处理函数}};mScanner= new Scanner(); //手动扫描类}在广播接收器中的相应函数onReceive函数中有个handleEvent函数,它就是用来处理广播接收器接受到的intent消息的,它的功能是根据intent 消息中的动作类型,来执行相应的操作,每一种动作对应了activity的一项消息处理能力。
wpa_supplicant
wpa_supplicant授权Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi>本程序是GPL 版本2和BSD许可证双授权,两者随意选择。
功能支持WPA/IEEE 802.11i功能:- WPA-PSK ("WPA-Personal")- WPA with EAP (e.g., with RADIUS authentication server) ("WPA-Enterprise") Following authentication methods are supported with an integrate IEEE 802.1X Supplicant:* EAP-TLS* EAP-PEAP/MSCHAPv2 (both PEAPv0 and PEAPv1)* EAP-PEAP/TLS (both PEAPv0 and PEAPv1)* EAP-PEAP/GTC (both PEAPv0 and PEAPv1)* EAP-PEAP/OTP (both PEAPv0 and PEAPv1)* EAP-PEAP/MD5-Challenge (both PEAPv0 and PEAPv1)* EAP-TTLS/EAP-MD5-Challenge* EAP-TTLS/EAP-GTC* EAP-TTLS/EAP-OTP* EAP-TTLS/EAP-MSCHAPv2* EAP-TTLS/EAP-TLS* EAP-TTLS/MSCHAPv2* EAP-TTLS/MSCHAP* EAP-TTLS/PAP* EAP-TTLS/CHAP* EAP-SIM* EAP-AKA* EAP-PSK* EAP-PAX* EAP-SAKE* EAP-IKEv2* EAP-GPSK* LEAP (note: requires special support from the driver for IEEE 802.11authentication)(following methods are supported, but since they do not generate keyingmaterial, they cannot be used with WPA or IEEE 802.1X WEP keying)* EAP-MD5-Challenge* EAP-MSCHAPv2* EAP-GTC* EAP-OTP- key management for CCMP, TKIP, WEP104, WEP40- RSN/WPA2 (IEEE 802.11i)* pre-authentication* PMKSA cachingSupported TLS/crypto libraries:- OpenSSL (default)- GnuTLSInternal TLS/crypto implementation (optional):- can be used in place of an external TLS/crypto library- TLSv1- X.509 certificate processing- PKCS #1- ASN.1- RSA- bignum- minimal size (ca. 50 kB binary, parts of which are already needed for WPA;TLSv1/X.509/ASN.1/RSA/bignum parts are about 25 kB on x86)需求Wpa_supplicant是为不同的驱动和操作系统而设计成可移植的.希望以后会有更多的无线网卡和OSes添加进来。
wpa_supplicant配置与应用
wpa_supplicant配置与应⽤1. 概述wpa_supplicant是wifi客户端(client)加密认证⼯具,和iwconfig不同,wpa_supplicant⽀持wep、wpa、wpa2等完整的加密认证,⽽iwconfig只能⽀持wep。
和wpa_supplocant相对应的,ap端的加密认证⼯具为hostapd。
wpa_supplicant运⾏于后台,它需要借助控制台⼯具wpa_cli来进⾏⼿动操作。
2. wpa_supplicant配置⽂件1. Config⽂件在wpa_supplicant源码⽬录下,存在参考的配置⽂件wpa_supplicant.conf,⼏乎包含⾥所有的配置项。
我们的配置⽂件不需要这么复杂,开始测试阶段,我只写最简单的配置⽂件,其它⼿动操作先。
在/etc/下建⽴配置⽂件wpa_supplicant.conf,内容如下:ctrl_interface=/var/run/wpa_supplicantupdate_config=1其中,update_config=1使能配置更改。
2. wpa_supplicant参数wpa_supplicant可以通过如下命令查看其所有操作参数:#wpa_supplicant --helpwpa_supplicant: invalid option -- -wpa_supplicant v0.8.xCopyright (c) 2003-2011, Jouni Malinen <j@w1.fi> and contributorsThis program is free software. You can distribute it and/or modify itunder the terms of the GNU General Public License version 2.Alternatively, this software may be distributed under the terms of theBSD license. See README and COPYING for more details.usage:wpa_supplicant [-BddhKLqqstuvW] [-P<pid file>] [-g<global ctrl>] \-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \[-b<br_ifname>] [-f<debug file>] [-e<entropy file>] \[-o<override driver>] [-O<override ctrl>] \[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \[-p<driver_param>] [-b<br_ifname>] ...]drivers:drivers:athr = Atheros Linux driveroptions:-b = optional bridge interface name-B = run daemon in the background-c = Configuration file-C = ctrl_interface parameter (only used if -c is not)-i = interface name-d = increase debugging verbosity (-dd even more)-D = driver name (can be multiple drivers: nl80211,wext)-e = entropy file-g = global ctrl_interface-K = include keys (passwords, etc.) in debug output-t = include timestamp in debug messages-h = show this help text-L = show license (GPL and BSD)-o = override driver parameter for new interfaces-O = override ctrl_interface parameter for new interfaces-p = driver parameters-P = PID file-q = decrease debugging verbosity (-qq even less)-v = show version-W = wait for a control interface monitor before starting-N = start describing new interfaceexample:wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf其中最常⽤的为:-i 指定端⼝,-c 指定配置⽂件,-D 指定使⽤的wifi驱动我们这⾥只指定端⼝和配置⽂件,驱动使⽤默认的。
无线加密的多种方法及其区别(WEP WPA TKIP EAP)
无线加密的多种方法及其区别(WEP WPA TKIP EAP)无线网络的安全性由认证和加密来保证。
认证允许只有被许可的用户才能连接到无线网络;加密的目的是提供数据的保密性和完整性(数据在传输过程中不会被篡改)。
802.11标准最初只定义了两种认证方法:●开放系统认证(Open System Authentication)●共享密钥认证(Shared Key Authentication)以及一种加密方法:●有线等效保密(Wired Equivalent Privacy – WEP)对于开放系统认证,在设置时也可以启用WEP,此时,WEP用于在传输数据时加密,对认证没有任何作用。
对于共享密钥认证,必须启用WEP,WEP不仅用于认证,也用于在传输数据时加密。
WEP使用对称加密算法(即发送方和接收方的密钥是一致的),WEP使用40位或104位密钥和24位初始化向量(Initialization Vector – IV,随机数)来加密数据。
注:使用初始化变量(IV)的目的是避免在加密的信息中出现相同的数据。
例如:在数据传输中,源地址总是相同的,如果只是单纯的加密(WEP使用静态密码),这样在加密的信息中会出现相同的数据,有可能被恶意地破解。
由于初始化变量(IV)是随机数,可以避免这种情况的出现。
在配置无线网络的安全性时,一般将40位/104位密钥写成密钥长度:64位(40+24)/128位(104+24)由于WEP有一些严重缺陷,如初始化向量的范围有限,而且是使用明文传送……,802.11使用802.1x来进行认证、授权和密钥管理,另外,IEEE开始制订802.11i标准,用于增强无线网络的安全性。
同时,Wi-Fi联盟与IEEE一起开发了Wi-Fi受保护的访问(Wi-Fi Protected Access – WPA)以解决WEP的缺陷WPAWPA不同于WEP,WPA同时提供认证(基于802.1x可扩展认证协议– Extensible Authentiation Protocl - EAP的认证)和加密(临时密钥完整性协议– Temporal Key Integrity Protocol –TKIP)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Wpa_supplicant_8 是什么中文直译受保护的wifi接入客户端。
它User mode的最底层,直接和kernel的驱动接口,一个完整的开源项目。
其中的wpa:Supplicant –是客户端Wi-Fi Protected Access (WPA) and Wi-Fi Protected Access II (WPA2) are two security protocols and security certification programs developed by the Wi-Fi Alliance to secure wireless computer networks. The Alliance defined these in response to serious weaknesses researchers had found in the previous system, WEP (Wired Equivalent Privacy).[1]Wpa_supplicant 在wiki上看到的内容wpa_supplicant is a free software implementation of an IEEE 802.11i supplicant for Linux, FreeBSD, NetBSD, AROS, Microsoft Windows and Haiku. In addition to being a full-featured WPA2 supplicant, it also implements WPA and older wireless LAN security protocols. Features include:WPA and full IEEE 802.11i/RSN/WPA2WPA-PSK and WPA2-PSK (pre-shared key) ("WPA-Personal")WPA with EAP (e.g., with RADIUS authentication server) ("WPA-Enterprise")key management for CCMP, TKIP, WEP (both 104/128 and 40/64 bit)RSN: PMKSA caching, pre-authenticationIncluded with the supplicant are a graphical user interface and a command line interface utility for interacting with the running supplicant. From either of these interfaces it is possible to review a list of currently visible networks, select one of them, provide any additional security information needed to authenticate with the network (e.g. a passphrase or username and password) and add it to the preference list to enable automatic reconnection in the future.The graphical user interface is built on top of the Qt library.https:///index.php/WPA_supplicant这个wpa_supplicant就是一个实现,一个很具体的内容啊!使用man -8 wpa_supplicant 就知道一些内容,而且在adb shell wpa_supplicant 就看到了好多的选项了,因此,它就是wifi 的完整底层实现。
官方网页http://hostap.epitest.fi/wpa_supplicant/wpa_supplicant is a cross-platform WPA supplicant with support for WEP, WPA and WPA2 (IEEE 802.11i / RSN (Robust Secure Network)). It is suitable for both desktop and laptop computers and even embedded systems.wpa_supplicant is the IEEE 802.1X/WPA component that is used in the client stations. It implements key negotiation with a WPA Authenticator and it controls the roaming and IEEE 802.11 authentication/association of the wireless driver.还是要看官方的文档啊:http://hostap.epitest.fi/wpa_supplicant/devel/这里有完全的说明,从开发者角度的,所有的内容,数据结构、函数结构API、每个文件的简单说明、目录说明、全局变量说明、变量索引说明等等,就是一个开发者完全手册。
wpa_supplicant-devel.pdf调用stack简述从framework到wpa_supplicant的适配层(wifi.c)网上介绍的帖子很多,而且本身也并不复杂,其中framework部分需要注意的是wifiService和wifiMoniter两部分,这两快一个是转发AP的CMD另一个是接收来自wpa_supplicant的CMD。
他们与本地库的连接都是通过JNI方法,具体实现方法在android_net_wifi_WifiNative.cpp ,修改名字了android_net_wifi_Wifi.cpp中。
在这个文件中可以大致看出AP会给wpa_supplicant下哪些命令。
1. /*2. * JNI registration.3. */4. static JNINativeMethod gWifiMethods[]={5. /* name, signature, funcPtr */6.7. {"loadDriver","()Z",(void*)android_net_wifi_loadDriver },8. {"isDriverLoaded","()Z",(void*)android_net_wifi_isDriverLoaded },9. {"unloadDriver","()Z",(void*)android_net_wifi_unloadDriver },10. {"startSupplicant","(Z)Z",(void*)android_net_wifi_startSupplicant },11. {"killSupplicant","(Z)Z",(void*)android_net_wifi_killSupplicant },12. {"connectToSupplicantNative","()Z",(void*)android_net_wifi_connectToSupplicant },13. {"closeSupplicantConnectionNative","()V",14. (void*)android_net_wifi_closeSupplicantConnection },15. {"waitForEventNative","()Ljava/lang/String;",(void*)android_net_wifi_waitForEvent },16. {"doBooleanCommandNative","(Ljava/lang/String;)Z",(void*)android_net_wifi_doBooleanCommand },17. {"doIntCommandNative","(Ljava/lang/String;)I",(void*)android_net_wifi_doIntCommand},18. {"doStringCommandNative","(Ljava/lang/String;)Ljava/lang/String;",19. (void*) android_net_wifi_doStringCommand },20. };这些命令通过wifi.c的wifi_command发送给wpa_supplicant,在发送命令的过程中实际是调用wpa_ctrl_request来完成命令发送的,wpa_ctrl_request是通过socket的方式,还有一种是writefile方式,两种方式都有,与wpa_supplicant进行通信的,然后通过wpa_ctrl_recv来接收来自wpa_supplicant的命令,并返回标识给wifi_wait_for_event。
层级简图源代码目录Diagram explains WLAN event flow from application to h/w with respect to rowboat android source tree.Application∙Settings/Connection Manager:<android-src>/packages/apps/Settings/src/com/android/settings/WirelessSettings .javaApplication Framework∙WiFi manager:<android-src>/frameworks/base/wifi/java/android/net/wifi∙JNI Implementation:<android-src>/frameworks/base/core/jni/android_net_wifi_WifiNative.cpp<android-src>/frameworks/base/core/jni/android_net_wifi_Gbk2utf.cpp∙Service :<android-src>/frameworks/base/services/java/com/android/server/wifi Libraries∙libhardware_legacy:<android-src>/hardware/libhardware_legacy/wifi/wifi.c∙wpa_supplicant (Daemon):<android-src>/external/hostap/wpa_supplicant从源代码看callStack众所周知,Android 是基于Linux内核的,所以直接支持Linux的WLAN接口。