怎么用脚本获取网络配置脚本

wen 实用脚本 2

本文目录导读:

怎么用脚本获取网络配置脚本

  1. 目录导读
  2. 为什么需要用脚本获取网络配置?
  3. 核心脚本工具选择:PowerShell vs Bash vs Python
  4. 实战:用PowerShell抓取Windows网络配置
  5. 实战:用Bash抓取Linux/macOS网络配置
  6. 跨平台方案:Python脚本统一获取网络配置
  7. 脚本输出优化与日志记录
  8. 常见问题与问答
  9. SEO优化小贴士与总结

《网络配置自动化:掌握脚本获取网络配置的完整指南》

目录导读

  1. 为什么需要用脚本获取网络配置?
    手动查询网络配置的痛点与自动化优势
  2. 核心脚本工具选择:PowerShell vs Bash vs Python
    各平台适用场景与代码示例
  3. 实战:用PowerShell抓取Windows网络配置
    获取IP、DNS、路由表、网卡状态的完整脚本
  4. 实战:用Bash抓取Linux/macOS网络配置
    ifconfig、ip命令、nmcli的脚本化处理
  5. 跨平台方案:Python脚本统一获取网络配置
    使用psutilsubprocess实现一次编写处处运行
  6. 脚本输出优化与日志记录
    如何将配置导出为JSON/CSV并添加时间戳
  7. 常见问题与问答
    • Q1:脚本执行报“权限不足”怎么办?
    • Q2:如何只获取特定网卡(如Wi-Fi)的配置?
    • Q3:脚本能否在公司上百台电脑上批量执行?
  8. SEO优化小贴士与总结

为什么需要用脚本获取网络配置?

在日常运维或故障排查中,我们经常需要查看IP地址、子网掩码、网关、DNS服务器、MAC地址等信息,手动敲命令(如ipconfigifconfig)看似简单,但当你面对以下场景时,脚本的价值就体现出来了:

  • 批量采集:50台服务器,逐一登录手动运行命令?耗时且易错。
  • 定期监控:每5分钟记录一次网络状态变化,用于分析抖动或丢包。
  • 自动化报告:每天生成网络配置快照,发送给IT主管。
  • 软件部署:脚本自动检测目标环境,若网络配置不符合要求则报警或修正。

脚本的核心优势:可重复、可调度、可扩展,一个精心设计的网络配置获取脚本,能让你从枯燥的重复劳动中解放出来,把精力放在更有价值的数据分析上。


核心脚本工具选择:PowerShell vs Bash vs Python

平台 推荐工具 适合场景
Windows PowerShell 系统自带,对象化输出,操作WMI简便
Linux/macOS Bash + 系统命令 轻量,兼容所有Unix-like系统
跨平台 Python 一次开发,多平台运行,生态丰富

取舍原则

  • 若你只管理Windows,PowerShell是最优选,因为它能直接调用.NET类库。
  • 若你管理混合环境,Python搭配psutil库可同时兼容Windows、Linux、macOS。
  • 若追求极致轻量且只需Linux,传统Bash脚本配合ip命令足够。

实战:用PowerShell抓取Windows网络配置

以下脚本会获取所有网络适配器的关键信息,并以表格形式输出:

# Get-NetworkConfig.ps1
$adapters = Get-NetAdapter | Where-Object {$_.Status -eq 'Up'}
$configs = @()
foreach ($adapter in $adapters) {
    $ipConfig = Get-NetIPAddress -InterfaceIndex $adapter.ifIndex -AddressFamily IPv4
    $dns = Get-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex
    $route = Get-NetRoute -InterfaceIndex $adapter.ifIndex -DestinationPrefix '0.0.0.0/0'
    $configs += [PSCustomObject]@{
        Name          = $adapter.Name
        MAC           = $adapter.MacAddress
        IP            = $ipConfig.IPAddress
        SubnetMask    = $ipConfig.PrefixLength # 例如24表示255.255.255.0
        Gateway       = $route.NextHop
        DNS1          = $dns.ServerAddresses[0]
        DNS2          = $dns.ServerAddresses[1]
        DHCPEnabled   = $adapter.DhcpEnabled
    }
}
$configs | Format-Table -AutoSize

运行方法:以管理员身份打开PowerShell,执行.\Get-NetworkConfig.ps1,若提示执行策略限制,先运行Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass


实战:用Bash抓取Linux/macOS网络配置

对于Linux,推荐使用ip命令(替代已弃用的ifconfig),以下脚本获取活动接口的IP、网关、DNS:

#!/bin/bash
# get_net_config.sh
for iface in $(ip -o link show | awk -F': ' '{print $2}' | grep -v lo); do
    state=$(ip -o link show $iface | awk '{print $9}')
    if [ "$state" = "UP" ]; then
        ip_addr=$(ip -4 addr show $iface | grep inet | awk '{print $2}')
        mac=$(ip link show $iface | grep ether | awk '{print $2}')
        gateway=$(ip route show default | grep $iface | awk '{print $3}')
        echo "接口: $iface"
        echo "MAC: $mac"
        echo "IP: $ip_addr"
        echo "网关: $gateway"
        echo "---"
    fi
done
# DNS (读取resolv.conf)
echo "DNS服务器:"
grep nameserver /etc/resolv.conf | awk '{print $2}'

macOS适配:macOS默认使用ifconfignetworksetup,可单独写分支,为节省篇幅,建议统一改用Python跨平台方案。


跨平台方案:Python脚本统一获取网络配置

使用Python的psutil库(需先安装:pip install psutil)和内置subprocess模块,编写一次脚本即可在Windows、Linux、macOS上运行:

# get_net_config.py
import psutil
import socket
import subprocess
import json
def get_network_info():
    info = []
    for iface_name, addrs in psutil.net_if_addrs().items():
        if iface_name == 'lo' or iface_name.startswith('docker'):
            continue
        mac = None
        ipv4 = None
        for addr in addrs:
            if addr.family == psutil.AF_LINK:  # MAC地址
                mac = addr.address
            elif addr.family == socket.AF_INET:  # IPv4
                ipv4 = addr.address
        # 获取网关(跨平台方式)
        try:
            if psutil.WINDOWS:
                gateway = subprocess.check_output('route print 0.0.0.0', shell=True).decode('gbk')
            else:
                gateway = subprocess.check_output("ip route show default | awk '{print $3}'", shell=True).decode().strip()
        except:
            gateway = '无法获取'
        info.append({
            'name': iface_name,
            'mac': mac,
            'ip': ipv4,
            'gateway': gateway
        })
    return info
if __name__ == '__main__':
    data = get_network_info()
    print(json.dumps(data, indent=2, ensure_ascii=False))

优点

  • 无需记忆不同系统的命令差异。
  • 输出为JSON,方便后续集成到CMDB或监控平台。
  • 可轻松扩展获取DNS、路由表、DHCP状态。

脚本输出优化与日志记录

为了便于审计,建议每次执行脚本时自动输出到文件并添加时间戳:

  • PowerShell输出到CSV:在脚本末尾添加$configs | Export-Csv -Path "NetworkConfig_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
  • Bash输出到日志:在脚本顶部添加exec > /var/log/netconfig_$(date +%Y%m%d_%H%M%S).log 2>&1
  • Python输出优化:使用logging模块,同时输出到控制台和文件。

格式化建议

  • 每日快照保留最近30天,用cron或Task Scheduler定期删除旧日志。
  • 多台设备时,文件名包含主机名,如NY-WEB-01_20250315_080000.json

常见问题与问答

Q1:脚本执行报“权限不足”怎么办?

A

  • Windows:右键PowerShell选择“以管理员身份运行”,或设置执行策略Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  • Linux:给脚本添加执行权限chmod +x get_net_config.sh,部分命令需sudo
  • Python:跨平台时,读取原始套接字可能需要root权限,建议非root时用subprocess调用系统命令。

Q2:如何只获取特定网卡(如Wi-Fi)的配置?

A:在脚本中加入过滤条件。

  • PowerShell:Get-NetAdapter -Name "Wi-Fi"
  • Bash:iface="wlan0" 后只处理该接口。
  • Python:在循环中加入if 'wlan' in iface_name or 'eth0' in iface_name

Q3:脚本能否在公司上百台电脑上批量执行?

A:可以,需要结合远程执行方案。

  • Windows:使用PowerShell远程会话(Invoke-Command -ComputerName (Get-Content list.txt) -FilePath .\Get-NetworkConfig.ps1)。
  • Linux:通过SSH无密码登录,用ssh user@host 'bash -s' < get_net_config.sh
  • 企业级方案:部署Ansible Playbook或使用SaltStack统一管理,脚本可作为模块调用。

SEO优化小贴士与总结

我们覆盖了从需求分析、工具选型到多平台实战的完整链条,若你的网站希望围绕“网络配置脚本”获取更多自然流量,建议:

  1. 细分长尾关键词:如“PowerShell获取DHCP服务器IP”、“Python获取默认网关”、“Linux脚本获取MAC地址”。
  2. 增加实操截图:在博文中插入脚本执行前后的命令行截图。
  3. 提供可下载脚本:将文中的PowerShell和Python脚本打包为ZIP文件,增加用户留存。
  4. 外部链接建设:引用微软PowerShell官方文档、psutil GitHub仓库,增加权威性。

无论是单机快速查看,还是大规模自动化采集,掌握用脚本获取网络配置都能极大提升效率,从PowerShell的深度集成到Python的跨平台灵活,选择最适合你场景的工具,并不断优化输出格式,才能真正把脚本变成你的“生产力工具”,下次当网络排查需要信息时,别再手动敲ipconfig了——让脚本帮你完成!

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