怎么用脚本获取已保存网络

wen 实用脚本 2

本文目录导读:

怎么用脚本获取已保存网络

  1. 目录导读
  2. 什么是“已保存网络”?
  3. 为什么需要用脚本获取已保存网络?
  4. 常见脚本语言与工具对比
  5. 实操:Windows系统下使用PowerShell脚本
  6. 实操:macOS/Linux系统下使用Shell脚本
  7. 跨平台方案:Python脚本详解
  8. 常见问题与Q&A(含重点问答)
  9. 安全与隐私注意事项
  10. 总结与延伸建议

怎么用脚本获取已保存网络?从原理到实战的完整指南

目录导读

  1. 什么是“已保存网络”?
  2. 为什么需要用脚本获取已保存网络?
  3. 常见脚本语言与工具对比
  4. 实操:Windows系统下使用PowerShell脚本
  5. 实操:macOS/Linux系统下使用Shell脚本
  6. 跨平台方案:Python脚本详解
  7. 常见问题与Q&A(含重点问答)
  8. 安全与隐私注意事项
  9. 总结与延伸建议

什么是“已保存网络”?

“已保存网络”指的是操作系统(如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脚本

步骤

  1. 以管理员身份运行PowerShell。
  2. 输入以下命令获取所有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(需nmcliiw工具):

获取所有连接过的网络:

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环境测试通过,不适用于所有系统版本,请根据实际环境调整命令路径和正则表达式。

抱歉,评论功能暂时关闭!