使用Python获取连接过的WiFi密码

本文详细介绍了如何使用Python编写脚本来获取Windows系统连接过的WiFi网络的密码,包括获取WiFi配置文件名称和密码的函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在今天的博客中,我们将学习如何使用Python编写一个简单的脚本,用于获取连接过的WiFi网络的密码。这个脚本适用于Windows操作系统,并使用了一些Python的标准库和命令行工具。即使你是零基础的人,也能轻松理解,我将一步步解释代码的每个部分。

了解脚本的功能

这个脚本有两个主要功能:

  1. 获取所有连接过的WiFi配置文件的名称。
  2. 遍历每个WiFi配置文件并获取密码。

代码解析

让我们逐步解析这段代码:

获取WiFi名

import subprocess
import re

首先,我们导入了两个Python标准库,subprocess 用于运行外部命令,re 用于处理正则表达式。

def get_wifi_profiles():
    try:
        # 获取所有连接过的WiFi配置文件
        result = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles'], shell=True, text=True)
        print(result)
        # 使用正则表达式提取WiFi配置文件名称
        profile_names = re.findall(r'所有用户配置文件 \: (.*)', result)

        return profile_names
    except subprocess.CalledProcessError:
        print("获取WiFi配置文件失败")
        return []

这是一个函数 get_wifi_profiles,它封装了获取WiFi配置文件名称的过程。首先,它使用 subprocess.check_output 运行了一个命令来显示所有连接过的WiFi配置文件。
原理是在cmd终端输入netsh wlan show profiles可以获取到连接过的所有WiFi的名称

接口 WLAN 上的配置文件:


组策略配置文件(只读)
---------------------------------
    <>

用户配置文件
-------------
    所有用户配置文件 : D0ublecl1ck
    所有用户配置文件 : D0blecl1ck
    所有用户配置文件 : HZNU
    当前用户配置文件 : 513

学习自这篇文章【学习笔记】利用cmd命令查看所有连接过的WiFi及其密码(超简洁,快速上手)

然后根据返回的数据格式特点,使用正则表达式 re.findall 从输出中提取WiFi配置文件的名称。

re.findall(r'所有用户配置文件 \: (.*)', result)

提取WiFi密码

def get_wifi_password(wifi_name):
    try:
        # 获取WiFi配置文件中的密码
        result = subprocess.check_output(['netsh', 'wlan', 'show', 'profile', f'name="{wifi_name}"', 'key=clear'], shell=True, text=True)

        # 在输出中查找密码
        password_index = result.find("关键内容") + len("关键内容") + 2

        password = result[password_index:].split('\n', 1)[0].strip()

        return password
    except subprocess.CalledProcessError:
        print(f"获取WiFi密码失败: {wifi_name}")
        return None

这是第二个函数 get_wifi_password,它用于获取特定WiFi配置文件的密码。它同样使用了 subprocess.check_output 运行了一个命令,通过参数 name="{wifi_name}" 指定了WiFi的名称,并使用 key=clear 显示密码。等同于cmd输入 netsh wlan show profiles name="Wifi名" key=clear,然后,通过字符串处理,找到密码的位置并提取出来。

# 获取所有连接过的WiFi配置文件
wifi_profiles = get_wifi_profiles()

# 遍历每个WiFi配置文件并获取密码
for wifi_name in wifi_profiles:
    wifi_password = get_wifi_password(wifi_name)
    if wifi_password:
        if ': ' in wifi_password:
            print(f"WiFi网络'{wifi_name}'的密码是{wifi_password}")
        else:
            print(f"WiFi网络'{wifi_name}'无密码")

最后,主程序部分。首先,调用 get_wifi_profiles 获取所有WiFi配置文件的名称,然后通过循环遍历每个WiFi配置文件,并调用 get_wifi_password 获取密码。最后,根据密码的格式输出相应的信息。

运行结果

WiFi网络'D0ublecl1ck'的密码是: 88888888
WiFi网络'D0blecl1ck'的密码是: 88888888
WiFi网络'HZNU'无密码

进程已结束,退出代码为 0

总结

通过这个简单的例子,我们学会了如何使用Python获取连接过的WiFi网络的密码。这对于有时候我们忘记了家里或办公室WiFi密码的情况非常有用。希望这个博客对你理解这段代码并学习Python有所帮助。如果有任何问题,可以私信或者评论区留言。

### 使用Python编程语言获取连接WiFi网络的密码 在Windows操作系统中,可以通过调用命令行工具`netsh`来查询已经保存在网络配置中的Wi-Fi密码。下面是一个利用Python脚本来完成这项工作的例子[^2]。 #### 方法概述 该方法依赖于执行系统命令并读取其输出结果的能力。具体来说就是运行带有适当参数的`netsh wlan show profile`指令以显示特定无线接口上的所有用户文件和安全设置;其中就包含了加密后的密钥材料以及明文形式下的预共享密钥(PSK),即通常所说的Wi-Fi密码。 #### 实现代码示例 以下是具体的Python代码实现: ```python import subprocess import re def get_wifi_passwords(): meta_data = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles']) data = meta_data.decode('utf-8', errors="backslashreplace").split('\n') profiles = [i.split(":")[1][1:-1] for i in data if "All User Profile" in i] wifi_list = [] if len(profiles) != 0: for name in profiles: try: results = subprocess.check_output( ['netsh', 'wlan', 'show', 'profile', name, 'key=clear']).decode('utf-8', errors="backslashreplace").split('\n') results = [b.split(":")[1][1:-1] for b in results if "Key Content" in b] try: wifi_info = {"ssid": name, "password": results[0]} wifi_list.append(wifi_info) except IndexError: wifi_info = {"ssid": name, "password": ""} wifi_list.append(wifi_info) except Exception as e: print(f"Error occurred while processing {name}: ", str(e)) return wifi_list if __name__ == "__main__": wifis = get_wifi_passwords() for item in wifis: print(item) ``` 这段程序会遍历当前计算机上所有的Wi-Fi配置文件,并尝试提取每个SSID对应的明文密码。注意,在某些情况下可能无法获得密码,这取决于设备的安全策略和其他因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

d0ublecl1ck_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值