本文目录导读:

- 目录导读
- 什么是“已保存网络”?
- 为什么需要用脚本获取已保存网络?
- 常见脚本语言与工具对比
- 实操:Windows系统下使用PowerShell脚本
- 实操:macOS/Linux系统下使用Shell脚本
- 跨平台方案:Python脚本详解
- 常见问题与Q&A(含重点问答)
- 安全与隐私注意事项
- 总结与延伸建议
怎么用脚本获取已保存网络?从原理到实战的完整指南
目录导读
- 什么是“已保存网络”?
- 为什么需要用脚本获取已保存网络?
- 常见脚本语言与工具对比
- 实操:Windows系统下使用PowerShell脚本
- 实操:macOS/Linux系统下使用Shell脚本
- 跨平台方案:Python脚本详解
- 常见问题与Q&A(含重点问答)
- 安全与隐私注意事项
- 总结与延伸建议
什么是“已保存网络”?
“已保存网络”指的是操作系统(如Windows、macOS、Linux)中记录的历史Wi-Fi连接信息,包括网络名称(SSID)和对应的密码(预共享密钥),许多用户在日常使用中会连接多个Wi-Fi,系统默认将这些网络保存在本地配置文件中,通过脚本获取这些信息,可以实现批量备份、迁移、审计或故障排查。
为什么需要用脚本获取已保存网络?
- 多设备迁移:换新电脑时,手动输入数十个Wi-Fi密码效率极低。
- 运维审计:IT管理员需要检查公司网络中是否存在弱密码或未授权的AP。
- 密码找回:忘记某个历史Wi-Fi密码,但当前设备已自动连接。
- 自动化备份:定期导出网络配置,防止系统重装后丢失。
常见脚本语言与工具对比
| 语言/工具 | 适用系统 | 核心命令 | 复杂程度 | 隐私风险 |
|---|---|---|---|---|
| PowerShell | Windows | netsh wlan show profile |
中等 | |
| Shell | macOS/Linux | security find-generic-password |
高 | |
| Python | 跨平台 | subprocess + 系统命令 |
中等 | |
| Batch | Windows | 纯命令文件 | 低 |
推荐:如果你只使用Windows,PowerShell是最简单高效的方案;跨平台场景推荐Python。
实操:Windows系统下使用PowerShell脚本
步骤:
- 以管理员身份运行PowerShell。
- 输入以下命令获取所有Wi-Fi配置文件的SSID:
netsh wlan show profiles | Select-String "所有用户配置文件" | ForEach-Object { $_ -replace ".*: ", "" }
导出所有密码(需管理员权限):
$profiles = netsh wlan show profiles | Select-String "所有用户配置文件" | ForEach-Object { $_ -replace ".*: ", "" }
foreach ($profile in $profiles) {
$details = netsh wlan show profile name="$profile" key=clear
$password = ($details | Select-String "关键内容" | ForEach-Object { $_ -replace ".*: ", "" })
Write-Output "SSID: $profile, Password: $password"
}
输出结果示例:
SSID: HomeNetwork, Password: 12345678
SSID: Office-Guest, Password: guest@2024
注意:执行时需关闭所有第三方安全软件,某些企业级网络可能因组策略限制无法读取密码。
实操:macOS/Linux系统下使用Shell脚本
macOS(需钥匙串访问权限):
获取所有Wi-Fi SSID:
networksetup -listpreferredwirelessnetworks en0 | grep -v "Preferred networks on"
导出密码(需输入当前系统用户密码):
for ssid in $(networksetup -listpreferredwirelessnetworks en0 | grep -v "Preferred networks on"); do
security find-generic-password -wa "$ssid" 2>/dev/null
done
Linux(需nmcli或iw工具):
获取所有连接过的网络:
nmcli connection show | grep wifi | awk '{print $1}'
导出密码:
for con in $(nmcli connection show | grep wifi | awk '{print $1}'); do
nmcli connection show "$con" | grep "802-11-wireless-security.psk" | awk '{print $2}'
done
跨平台方案:Python脚本详解
环境要求:Python 3.6+,无需额外第三方库。
核心逻辑:通过subprocess调用系统命令并解析输出。
import subprocess
import re
def get_wifi_windows():
data = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles']).decode('utf-8', errors='ignore')
ssids = re.findall(r"所有用户配置文件\s+:\s+(.*)", data)
for ssid in ssids:
profile_info = subprocess.check_output(['netsh', 'wlan', 'show', 'profile', ssid, 'key=clear']).decode('utf-8', errors='ignore')
password = re.search(r"关键内容\s+:\s+(.*)", profile_info)
print(f"SSID: {ssid}, Password: {password.group(1) if password else 'N/A'}")
def get_wifi_macos():
data = subprocess.check_output(['networksetup', '-listpreferredwirelessnetworks', 'en0']).decode('utf-8')
ssids = data.split('\n')[1:] # 跳过首行标题
for ssid in ssids:
ssid = ssid.strip()
if not ssid:
continue
try:
pwd = subprocess.check_output(['security', 'find-generic-password', '-wa', ssid], stderr=subprocess.DEVNULL).decode().strip()
print(f"SSID: {ssid}, Password: {pwd}")
except:
print(f"SSID: {ssid}, Password: 无法获取(需钥匙串授权)")
# 根据系统自动调用
import platform
if platform.system() == 'Windows':
get_wifi_windows()
elif platform.system() == 'Darwin':
get_wifi_macos()
else:
print("Linux请使用nmcli手动获取")
优势:一份脚本可移植到Windows/macOS,且容易扩展为CSV或JSON导出。
常见问题与Q&A(含重点问答)
Q1:脚本执行后提示“找不到任何网络配置文件”?
A:大概率脚本未以管理员权限运行,Windows下PowerShell需右键“以管理员身份运行”;macOS需在“系统偏好设置-安全性与隐私”中授予终端“完全磁盘访问权限”。
Q2:为什么macOS获取时总是要求输入系统密码?
A:钥匙串默认保护所有密码,可以临时将钥匙串解锁有效期设为全天(security set-keychain-settings -t 86400),脚本执行后务必恢复默认。
Q3:脚本会泄露隐私吗?
A:重点:脚本本身仅读取本地文件,但输出内容可能暴露家庭、公司网络密码。不要将输出结果上传至任何公开平台,也不要在受信任的脚本中使用硬编码密码。
Q4:企业网络(如802.1x证书认证)能通过脚本获取密码吗?
A:不能,此类网络使用证书或用户名+动态密码,脚本仅能获取WPA/WPA2的预共享密钥(PSK),证书认证的密码存储在系统证书库中,无法通过简单脚本读取。
Q5:如何将结果导出为文件?
A:在PowerShell命令后加| Out-File -FilePath C:\wifi_backup.txt;Python脚本可以添加with open("wifi.csv","w") as f:写入。
安全与隐私注意事项
- 权限最小化:脚本执行完毕后,立即删除输出的明文密码文件。
- 加密存储:若需长期保存,使用GPG或7-Zip加密压缩。
- 警惕恶意软件:部分“一键获取Wi-Fi密码”的第三方工具会窃取信息,尽量使用开源脚本。
- 系统更新影响:Windows 11和macOS Ventura后,部分API被限制,需关注官方更新日志。
总结与延伸建议
通过脚本获取已保存网络,本质上是对系统底层API(netsh、security、nmcli)的编程化调用,对于普通用户,PowerShell一行命令即可解决日常备份问题;对于开发者和运维,Python脚本提供了更强的可定制性,例如自动过滤低频网络、按连接时间排序、或直接导入新设备脚本。
延伸学习方向:
- 使用Python的
pywifi库实现更底层的Wi-Fi扫描与连接管理。 - 结合
argparse模块将脚本封装为命令行工具(如wifiscan --export csv)。 - 在安全审计领域,配合
aircrack-ng破解WEP网络。
技术本身是中立的,但请确保你获取密码的Wi-Fi网络属于你个人或已经获得明确授权,随意探测他人网络密码可能违反《网络安全法》和当地隐私法规。
本文基于Windows 11、macOS Sonoma、Ubuntu 22.04环境测试通过,不适用于所有系统版本,请根据实际环境调整命令路径和正则表达式。