Python利用pywifi模块实现查看WIFI密码的方法详解

原创 2025-05-14 10:48:21编程技术
1227

在网络安全领域,查看已连接WiFi的密码是一个常见需求。本文ZHANID工具网将详细讲解如何利用Python的pywifi模块开发跨平台的WiFi密码查看器,包含完整代码实现和分步解析。

wifi查看器.webp

一、技术原理与工具选型

1. pywifi模块能力边界

pywifi是一个跨平台的WiFi控制库,核心功能包括:

  • 扫描周边WiFi信号

  • 获取当前连接状态

  • 管理WiFi配置文件

  • 连接/断开指定WiFi

注意pywifi本身无法直接读取系统密码,需结合系统级操作。

2. 密码存储机制对比

操作系统 存储位置 访问方式
Windows XML配置文件(netsh wlan export导出) 管理员权限解析
Linux/etc/NetworkManager/目录 root权限读取
macOS 钥匙串数据库(Keychain) 用户授权访问

二、环境准备与依赖安装

1. 安装pywifi模块

pip install pywifi

2. 系统依赖配置

  • Windows:需以管理员权限运行脚本

  • Linux:安装NetworkManager

    sudo apt-get install network-manager
  • macOS:启用终端全盘访问权限(系统设置→隐私与安全性)

三、核心代码实现

1. Windows系统实现

步骤1:导出WiFi配置文件

import subprocess
import xml.etree.ElementTree as ET

def export_windows_profile(ssid):
    """导出Windows WiFi配置文件"""
    cmd = f'netsh wlan export profile name="{ssid}" key=clear folder=.'
    subprocess.run(cmd, shell=True, check=True)
    return f'{ssid}.xml'

def parse_windows_password(xml_file):
    """解析XML文件获取密码"""
    tree = ET.parse(xml_file)
    root = tree.getroot()
    key_material = root.find(".//keyMaterial")
    return key_material.text if key_material is not None else None

步骤2:获取所有已保存SSID

def get_all_windows_profiles():
    """获取所有已保存的WiFi配置文件"""
    output = subprocess.check_output('netsh wlan show profiles').decode()
    return [line.split(':')[-1].strip() for line in output.split('\n') 
            if '所有用户配置文件' in line]

2. Linux系统实现

直接读取配置文件

import os

def get_linux_password(ssid):
    """读取Linux系统配置文件"""
    config_path = f'/etc/NetworkManager/system-connections/{ssid}'
    if not os.path.exists(config_path):
        return None
    
    with open(config_path, 'r') as f:
        for line in f:
            if 'psk=' in line:
                return line.split('=')[-1].strip().strip(';')
    return None

3. macOS系统实现

使用security命令

def get_macos_password(ssid):
    """获取macOS钥匙串密码"""
    cmd = f'security find-generic-password -wa {ssid} 2>&1'
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    if "could not find" in result.stderr:
        return None
    return result.stdout.strip()

四、跨平台统一接口

import platform

def get_wifi_password(ssid=None):
    """跨平台获取WiFi密码"""
    system = platform.system()
    
    if system == 'Windows':
        if not ssid:
            return get_all_windows_profiles()
        xml_file = export_windows_profile(ssid)
        return parse_windows_password(xml_file)
    
    elif system == 'Linux':
        if not ssid:
            # 获取当前连接SSID
            from pywifi import PyWiFi
            iface = PyWiFi().interfaces()[0]
            current = iface.current_connection()
            return [current.ssid()] if current else []
        return get_linux_password(ssid)
    
    elif system == 'Darwin':
        if not ssid:
            # 获取当前连接SSID
            from pywifi import PyWiFi
            iface = PyWiFi().interfaces()[0]
            current = iface.current_connection()
            return [current.ssid()] if current else []
        return get_macos_password(ssid)
    
    else:
        return "不支持的操作系统"

五、完整示例代码

import argparse

def main():
    parser = argparse.ArgumentParser(description='WiFi密码查看器')
    parser.add_argument('--list', action='store_true', help='列出所有已保存WiFi')
    parser.add_argument('--ssid', help='指定查看的WiFi名称')
    args = parser.parse_args()

    passwords = get_wifi_password()
    
    if args.list:
        print("已保存的WiFi列表:")
        for idx, ssid in enumerate(passwords, 1):
            print(f'{idx}. {ssid}')
        return

    if args.ssid:
        password = get_wifi_password(args.ssid)
        if password:
            print(f'{args.ssid} 的密码:{password}')
        else:
            print(f'未找到 {args.ssid} 的密码')
        return

    # 默认显示当前连接WiFi
    current_ssid = passwords[0] if passwords else None
    if current_ssid:
        password = get_wifi_password(current_ssid)
        print(f'当前连接WiFi:{current_ssid}')
        print(f'密        码:{password}')
    else:
        print('未检测到已保存的WiFi配置')

if __name__ == '__main__':
    main()

六、使用说明与注意事项

1. 运行方式

# 列出所有已保存WiFi
python wifi_password_viewer.py --list

# 查看指定WiFi密码
python wifi_password_viewer.py --ssid "Your_SSID"

# 查看当前连接WiFi密码(默认)
python wifi_password_viewer.py

2. 权限要求

  • Windows:以管理员身份运行

  • Linux:使用sudo执行

  • macOS:首次运行时需授权终端访问钥匙串

3. 安全建议

  • 仅在受信环境中使用

  • 避免将密码明文输出到日志

  • 建议添加密码加密存储功能

七、法律声明

本工具仅用于技术研究和个人设备管理,未经授权获取他人WiFi密码可能违反《中华人民共和国网络安全法》。使用者需自行承担法律风险,开发者和维护者不承担任何法律责任。

八、扩展方向

  1. 添加GUI界面(推荐使用PyQt5)

  2. 实现密码强度检测功能

  3. 集成WiFi信号质量监控

  4. 添加自动连接指定WiFi功能

通过本文的学习,您已掌握使用Python开发跨平台WiFi密码查看器的核心技术。实际应用中请严格遵守网络安全法律法规,确保技术使用的合法合规性。

Python
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

Python yield 用法大全:轻松掌握生成器与迭代器设计
在Python中,yield关键字是构建生成器的核心工具,它通过状态保存机制实现了高效的内存管理和惰性计算。与传统的迭代器实现相比,yield能将迭代器设计从复杂的类定义简化为直...
2025-09-15 编程技术
1207

基于Python的旅游数据分析可视化系统【2026最新】
本研究成功开发了基于Python+Django+Vue+MySQL的旅游数据分析可视化系统,实现了从数据采集到可视化展示的全流程管理。系统采用前后端分离架构,前端通过Vue框架构建响应式界...
2025-09-13 编程技术
1152

手把手教你用Python读取txt文件:从基础到实战的完整教程
Python作为数据处理的利器,文件读写是其基础核心功能。掌握txt文件读取不仅能处理日志、配置文件等常见场景,更是理解Python文件I/O的基石。本文ZHANID工具网将从基础语法到...
2025-09-12 编程技术
1069

Python Flask 入门指南:从零开始搭建你的第一个 Web 应用
Flask作为 Python 中最轻量级且灵活的 Web 框架之一,特别适合初学者快速上手 Web 应用开发。本文将带你一步步了解如何在本地环境中安装 Flask、创建一个简单的 Web 应用,并...
2025-09-11 编程技术
1011

Python 如何调用 MediaPipe?详细安装与使用指南
MediaPipe 是 Google 开发的跨平台机器学习框架,支持实时处理视觉、音频和文本数据。本文脚本之家将系统讲解 Python 环境下 MediaPipe 的安装、配置及核心功能调用方法,涵盖...
2025-09-10 编程技术
1082

基于Python开发一个利率计算器的思路及示例代码
利率计算是金融领域的基础需求,涵盖贷款利息、存款收益、投资回报等场景。传统计算依赖手工公式或Excel表格,存在效率低、易出错等问题。Python凭借其简洁的语法和强大的数学...
2025-09-09 编程技术
1097