本文目录导读:

- 目录导读
- 为什么需要用脚本获取网络配置?
- 核心脚本工具选择:PowerShell vs Bash vs Python
- 实战:用PowerShell抓取Windows网络配置
- 实战:用Bash抓取Linux/macOS网络配置
- 跨平台方案:Python脚本统一获取网络配置
- 脚本输出优化与日志记录
- 常见问题与问答
- SEO优化小贴士与总结
《网络配置自动化:掌握脚本获取网络配置的完整指南》
目录导读
- 为什么需要用脚本获取网络配置?
手动查询网络配置的痛点与自动化优势 - 核心脚本工具选择:PowerShell vs Bash vs Python
各平台适用场景与代码示例 - 实战:用PowerShell抓取Windows网络配置
获取IP、DNS、路由表、网卡状态的完整脚本 - 实战:用Bash抓取Linux/macOS网络配置
ifconfig、ip命令、nmcli的脚本化处理 - 跨平台方案:Python脚本统一获取网络配置
使用psutil与subprocess实现一次编写处处运行 - 脚本输出优化与日志记录
如何将配置导出为JSON/CSV并添加时间戳 - 常见问题与问答
- Q1:脚本执行报“权限不足”怎么办?
- Q2:如何只获取特定网卡(如Wi-Fi)的配置?
- Q3:脚本能否在公司上百台电脑上批量执行?
- SEO优化小贴士与总结
为什么需要用脚本获取网络配置?
在日常运维或故障排查中,我们经常需要查看IP地址、子网掩码、网关、DNS服务器、MAC地址等信息,手动敲命令(如ipconfig或ifconfig)看似简单,但当你面对以下场景时,脚本的价值就体现出来了:
- 批量采集: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默认使用ifconfig和networksetup,可单独写分支,为节省篇幅,建议统一改用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优化小贴士与总结
我们覆盖了从需求分析、工具选型到多平台实战的完整链条,若你的网站希望围绕“网络配置脚本”获取更多自然流量,建议:
- 细分长尾关键词:如“PowerShell获取DHCP服务器IP”、“Python获取默认网关”、“Linux脚本获取MAC地址”。
- 增加实操截图:在博文中插入脚本执行前后的命令行截图。
- 提供可下载脚本:将文中的PowerShell和Python脚本打包为ZIP文件,增加用户留存。
- 外部链接建设:引用微软PowerShell官方文档、psutil GitHub仓库,增加权威性。
无论是单机快速查看,还是大规模自动化采集,掌握用脚本获取网络配置都能极大提升效率,从PowerShell的深度集成到Python的跨平台灵活,选择最适合你场景的工具,并不断优化输出格式,才能真正把脚本变成你的“生产力工具”,下次当网络排查需要信息时,别再手动敲ipconfig了——让脚本帮你完成!