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

一、技术原理与工具选型
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 None3. 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密码可能违反《中华人民共和国网络安全法》。使用者需自行承担法律风险,开发者和维护者不承担任何法律责任。
八、扩展方向
添加GUI界面(推荐使用PyQt5)
实现密码强度检测功能
集成WiFi信号质量监控
添加自动连接指定WiFi功能
通过本文的学习,您已掌握使用Python开发跨平台WiFi密码查看器的核心技术。实际应用中请严格遵守网络安全法律法规,确保技术使用的合法合规性。
本文由@战地网 原创发布。
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/4226.html




















