怎么用脚本获取当前网络共享

wen 实用脚本 2

本文目录导读:

怎么用脚本获取当前网络共享

  1. 📚 目录导读
  2. 为什么需要自动化获取网络共享?
  3. 核心概念:理解网络共享与脚本获取原理
  4. 方法一:Windows环境下用PowerShell脚本获取
  5. 方法二:Linux/macOS环境下用Bash脚本获取
  6. 方法三:跨平台Python脚本方案
  7. 常见问题与问答(Q&A)
  8. 进阶:将脚本整合到自动化运维中

如何用脚本获取当前网络共享信息?从命令行到自动化的完整指南


📚 目录导读

  1. 为什么需要自动化获取网络共享?
  2. 核心概念:理解网络共享与脚本获取原理
  3. Windows环境下用PowerShell脚本获取
  4. Linux/macOS环境下用Bash脚本获取
  5. 跨平台Python脚本方案
  6. 常见问题与问答(Q&A)
  7. 进阶:将脚本整合到自动化运维中

为什么需要自动化获取网络共享?

在日常运维、开发调试或家庭网络管理中,我们经常需要快速查看当前计算机已连接或可访问的网络共享资源。

  • 检查是否有未授权的共享文件夹暴露在局域网
  • 自动化备份脚本需要确认远程共享路径是否可达
  • 多设备环境下的网络资源排查

手动通过“网络邻居”或“smbclient -L”查看虽然可行,但效率低且无法集成到脚本化工作流中。用脚本获取当前网络共享,可以让你在几秒内获得结构化数据,并进一步实现监控、报警或自动化挂载。


核心概念:理解网络共享与脚本获取原理

网络共享,通常指通过SMB/CIFS协议(Windows文件共享)或NFS(Linux/Unix)暴露的目录资源,脚本获取共享的核心思路是:

  • 调用系统原生命令(如 net viewsmbclientshowmount
  • 解析命令输出,提取共享名称、路径、状态等信息
  • 输出为结构化格式(JSON、CSV、纯文本)

为什么不用GUI? 因为脚本可以:

  • 实现定时监控
  • 对接日志系统
  • 批量检查数百台机器

方法一:Windows环境下用PowerShell脚本获取

📝 完整脚本示例

# get-networkshares.ps1
# 用途:获取当前Windows系统上的已连接网络共享
Write-Host "正在查询本机已建立的网络连接..." -ForegroundColor Cyan
# 方法1:通过 net use 获取已映射的驱动器
$netUseResult = net use 2>&1
Write-Host "=== 已映射的网络驱动器 ===" -ForegroundColor Green
$netUseResult | ForEach-Object { Write-Host $_ }
# 方法2:通过 Get-SmbConnection 获取SMB会话(需Windows 10/Server 2012+)
$smbConnections = Get-SmbConnection -ErrorAction SilentlyContinue
if ($smbConnections) {
    Write-Host "`n=== 当前SMB连接详情 ===" -ForegroundColor Green
    $smbConnections | Format-Table -AutoSize
} else {
    Write-Host "`n[信息] 未发现活跃SMB连接。"
}
# 方法3:获取本机共享出的文件夹
Write-Host "`n=== 本机已共享的文件夹 ===" -ForegroundColor Green
Get-SmbShare | Format-Table Name, Path, Description -AutoSize

输出示例:

正在查询本机已建立的网络连接...
=== 已映射的网络驱动器 ===
状态       本地        远程                    网络
OK          Z:          \\192.168.1.100\Backup  Microsoft Windows Network
=== 当前SMB连接详情 ===
ServerName          ShareName         UserName          Credentials
-----------          ---------         --------          -----------
192.168.1.100       Backup           WORKGROUP\admin    Password
=== 本机已共享的文件夹 ===
Name      Path                Description
----      ----                -----------
Documents C:\Users\Public     Public Documents

🔧 常见命令对比

命令 用途 适用版本
net use 映射驱动器 所有Windows
Get-SmbConnection SMB会话详情 Win8/2012+
Get-SmbShare 本机共享列表 Win8/2012+

方法二:Linux/macOS环境下用Bash脚本获取

📝 完整脚本示例

#!/bin/bash
# get-shares.sh
# 用途:查看当前Linux/macOS设备可访问的网络共享
echo "=== Linux/macOS 网络共享检测脚本 ==="
# 1. 检查是否安装smbclient
if ! command -v smbclient &> /dev/null; then
    echo "[警告] 未安装 smbclient,请先运行:sudo apt install smbclient (或 brew install smbclient)"
    exit 1
fi
# 2. 提示输入远程服务器IP
read -p "请输入要查询的远程服务器IP或主机名: " server_ip
# 3. 匿名枚举共享(也可改为带认证)
echo "正在枚举 $server_ip 的共享资源..."
smbclient -L //$server_ip -N 2>&1
# 4. (可选) 查看本机挂载的NFS共享
echo ""
echo "=== 本机已挂载的NFS共享 ==="
mount | grep nfs || echo "未发现NFS挂载点"
# 5. macOS专用:显示已连接的SMB共享
if [[ "$OSTYPE" == "darwin"* ]]; then
    echo ""
    echo "=== macOS Finder中显示的共享 ==="
    df -H | grep '/Volumes/' | awk '{print $1, $NF}'
fi

运行效果

请输入要查询的远程服务器IP或主机名: 192.168.1.100
正在枚举 192.168.1.100 的共享资源...
    Sharename       Type      Comment
    ---------       ----      -------
    Backup          Disk      Weekly backup
    Public          Disk      
    IPC$            IPC       IPC Service
=== 本机已挂载的NFS共享 ===
192.168.1.50:/data on /mnt/data (nfs, rw, relatime)

方法三:跨平台Python脚本方案

如果你需要在Windows、Linux、macOS上运行同一份脚本,Python 是最佳选择。

📝 完整脚本(python获取当前共享)

#!/usr/bin/env python3
# get_shares.py
# 跨平台获取网络共享信息
import subprocess
import platform
import json
def get_smb_shares_windows():
    """Windows下通过PowerShell获取共享"""
    try:
        cmd = ['powershell', '-Command', 'Get-SmbConnection | ConvertTo-Json']
        result = subprocess.run(cmd, capture_output=True, text=True, check=True)
        if result.stdout.strip():
            return json.loads(result.stdout)
    except:
        pass
    return []
def get_smb_shares_linux(server):
    """Linux下通过smbclient获取共享"""
    try:
        cmd = ['smbclient', '-L', f'//{server}', '-N']
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=5)
        lines = result.stdout.split('\n')
        shares = [line.split()[0] for line in lines if line.startswith('\t') and not line.startswith('\tSharename')]
        return shares
    except:
        return []
def main():
    system = platform.system()
    print(f"当前系统: {system}")
    if system == 'Windows':
        print("正在检测Windows网络共享...")
        connections = get_smb_shares_windows()
        if connections:
            print(f"发现 {len(connections)} 个活跃SMB连接:")
            for conn in connections:
                print(f"  服务器: {conn.get('ServerName')} 共享: {conn.get('ShareName')}")
        else:
            print("未发现活跃SMB连接或需要管理员权限。")
    elif system == 'Linux':
        server = input("请输入SMB服务器地址: ")
        shares = get_smb_shares_linux(server)
        print(f"从 {server} 获取到共享: {shares}")
    else:
        print("macOS下请使用 smbutil view 命令。")
if __name__ == "__main__":
    main()

为什么选择Python?

  • 可解析命令输出为JSON/字典
  • 易于异常处理(超时、权限不足)
  • 可直接对接监控平台(如Prometheus exporter)

常见问题与问答(Q&A)

❓ Q1:脚本执行时提示“拒绝访问”怎么办?

A: 大部分网络共享查询需要管理员/root权限,在Windows下以管理员身份运行PowerShell;Linux/macOS加 sudo,如果是远程枚举共享,确保SMB端口(445)未被防火墙阻挡。

❓ Q2:为什么 Get-SmbConnection 返回空?

A: 该命令仅显示通过Windows SMB客户端建立的连接,如果共享是通过其他方式(如直接IP访问)挂载,可能由 net use 显示,需同时检查两种方式。

❓ Q3:如何用脚本检测内网所有设备的共享?

A: 可结合 nmap 扫描445端口,再对每个IP调用上述脚本,注意:大规模扫描可能被网络设备视为攻击行为,务必在可控网络内进行。

❓ Q4:macOS如何用终端获取当前挂载的网络共享?

A: 使用 smbutil view //serverIP 查看可用的共享,用 df -H | grep /Volumes 查看已挂载的卷,也可参考上面的Bash脚本。

❓ Q5:脚本输出的共享列表中有乱码?

A: 通常是因为远程共享使用非ASCII字符,或编码问题,可以在PowerShell中指定 [System.Text.Encoding]::UTF8;Linux下设置环境变量 LANG=en_US.UTF-8


进阶:将脚本整合到自动化运维中

获取共享信息只是第一步,请看以下实际应用场景:

场景1:共享可用性监控

# 每小时检查一次共享是否在线
$share = "\\192.168.1.100\Backup"
if (Test-Path $share) {
    Write-EventLog -LogName Application -Source "ShareMonitor" -EntryType Information -EventId 100 -Message "共享 $share 可用"
} else {
    Write-EventLog -LogName Application -Source "ShareMonitor" -EntryType Error -EventId 200 -Message "共享 $share 不可达!"
}

场景2:将共享列表导出为CSV

# 导出所有smb共享到文件
smbclient -L //192.168.1.100 -N | grep -E '^\t' | awk '{print $1}' > shares_backup_$(date +%Y%m%d).csv

场景3:集成到Docker/容器环境

使用Python脚本定期检查共享,并通过HTTP接口暴露状态,配合Prometheus抓取数据。


通过本文,你学会了三种用脚本获取当前网络共享的方法:

方法 优势 适用场景
PowerShell脚本 原生支持Windows,命令丰富 企业Windows运维
Bash脚本 轻量、直接调用系统命令 Linux/macOS管理员
Python脚本 跨平台、可定制、易集成 开发、DevOps、容器化环境

核心口诀:

  • Windows看 net use + Get-SmbConnection
  • Linux用 smbclient -L
  • 跨平台就用Python包装命令

打开你的终端,动手写一个属于你自己的网络共享检测脚本吧!如果你有特殊的网络环境(如需要Kerberos认证、不同SMB协议版本),可以在原有脚本基础上增加认证参数或错误重试逻辑。

最后提醒:在实战环境中,请务必遵守网络安全规范,不要对未授权的系统进行共享扫描。

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