用脚本定时切换网络设置

wen 实用脚本 2


《告别手动切换!用脚本定时切换网络设置,实现网络环境全自动无缝衔接》**

用脚本定时切换网络设置


目录导读

  1. 为什么你需要定时切换网络设置?
  2. 核心原理:脚本如何操控系统网络配置
  3. 实战脚本案例(Windows / macOS / Linux)
  4. 进阶玩法:按时间、按地点自动切换
  5. 常见问题解答(FAQ)
  6. 安全与稳定性建议

为什么你需要定时切换网络设置?

在日常办公或居家生活中,我们常遇到这样的场景:

  • 早晨9点,公司网络要求固定IP和代理,下午6点回家需切换为自动获取IP。
  • 开发人员需要在“测试内网”与“外网调试”之间频繁切换DNS。
  • 远程工作者希望在工作时间用VPN,休息时间自动断开以节省带宽。

手动切换网络设置(IP地址、DNS、代理、Wi-Fi/有线网卡)不仅麻烦,还容易出错,而通过脚本定时任务,你可以让电脑在指定时间自动执行“网络配置变更”,实现无人值守,这不仅提升效率,还能避免因忘记切换而导致的网络故障,根据TechRadar的统计,自动化网络切换可减少约35%的IT支持工单。


核心原理:脚本如何操控系统网络配置

无论是Windows的netsh命令、macOS的networksetup工具,还是Linux的nmcli,它们都提供了命令行接口来修改网络参数,脚本的本质就是将这些命令封装成逻辑块,并调用系统的“任务计划程序”(如Windows任务计划、cron、launchd)来定时触发。

  • Windowsnetsh interface ip set addressSet-DnsClientServerAddress(PowerShell)。
  • macOSnetworksetup -setmanual "Ethernet" 192.168.1.100 255.255.255.0
  • Linuxnmcli con mod "Wired" ipv4.addresses 192.168.1.100/24

脚本还可读取“当前时间”或“网络连接状态”,通过条件判断(if-else)来实现智能切换。


实战脚本案例(复制即用)

▶ Windows PowerShell 脚本(保存为 switch_network.ps1)

# 定义两个网络配置
$workDNS = "8.8.8.8, 8.8.4.4"
$homeDNS = "114.114.114.114"
# 判断当前时间(假设19:00后切换为家庭模式)
if ((Get-Date).Hour -ge 19) {
    Set-DnsClientServerAddress -InterfaceAlias "以太网" -ServerAddresses $homeDNS
    Write-Host "已切换至家庭DNS"
} else {
    Set-DnsClientServerAddress -InterfaceAlias "以太网" -ServerAddresses $workDNS
    Write-Host "已切换至办公DNS"
}

然后使用“任务计划程序”创建每日触发任务,触发器设为19:00和9:00。

▶ macOS Bash 脚本(cron 方式)

#!/bin/bash
# 保存为 /usr/local/bin/netswitch.sh
if [ $(date +%H) -ge 9 ] && [ $(date +%H) -lt 18 ]; then
    networksetup -setmanual Wi-Fi 192.168.1.10 255.255.255.0 192.168.1.1
    networksetup -setdnsservers Wi-Fi 8.8.8.8
else
    networksetup -setdhcp Wi-Fi
    networksetup -setdnsservers Wi-Fi empty
fi

再用 crontab -e 添加:*/30 * * * * /usr/local/bin/netswitch.sh(每30分钟检查一次)。

▶ Linux(NetworkManager)

#!/bin/bash
time=$(date +%H)
if [ $time -ge 8 ] && [ $time -lt 20 ]; then
    nmcli con mod "公司网" ipv4.addresses "10.0.0.5/24"
    nmcli con up "公司网"
else
    nmcli con mod "家庭网" ipv4.addresses "192.168.1.5/24"
    nmcli con up "家庭网"
fi

进阶玩法:按时间、按地点自动切换

除了简单的时间判断,脚本还可以利用Wi-Fi名称网络网关判断当前环境:

  • 连接特定SSID(如“Office_WiFi”)时,强制设置代理或VPN。
  • 检测到手机热点名称时,自动关闭代理以节省流量。

在脚本中加入:

if iwgetid | grep -q "Home_5G"; then
    # 家用网络配置
fi

结合系统定时器(如systemd timer),还能实现“工作日/周末”不同策略。


常见问题解答(FAQ)

Q1:脚本切换会短暂断网吗?
A:修改IP/DNS时,网卡会瞬间重启连接,通常造成2-3秒的闪断,建议在非关键任务时间运行(如午休),或使用netshskipassource参数减少影响。

Q2:如何防止脚本执行失败?
A:在脚本前后添加日志输出,并设置任务计划“如果失败则重新启动”,也可以使用try-catch捕获异常(PowerShell)。

Q3:是否支持切换VPN连接?
A:支持,Windows可调用rasdial命令,macOS可用osascript触发系统VPN,Linux可用openvpn --config后台启动。

Q4:脚本能否与第三方工具联动?
A:可以,通过Shell调用API(如Webhook),甚至能实现“手机端远程切换”。


安全与稳定性建议

  • 权限管理:脚本需以管理员/root权限运行,但注意不要将明文密码写入脚本,使用credential manager或环境变量。
  • 异常回滚:在脚本开头保存当前配置,如果切换失败则自动恢复备份。
  • 测试环境:先在虚拟机上运行一周,确保无冲突后再部署到工作机。
  • 避免过度依赖:建议保留一个“手动快捷方式”,例如桌面双击即可恢复默认设置。


通过脚本定时切换网络设置,你可以把重复、易错的操作完全交给系统,无论是适应办公与家居双环境,还是实现自动化运维,这都是一项高性价比的技能,现在就试着写一段简单的脚本,开启你的“网络自动化”之旅吧。

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