求助编写PowerShell脚本实现路由器Web配置防火墙出站规则批量创建
PowerShell 实现路由器防火墙规则自动化脚本
一、路由器Web界面自动化(核心难点说明)
不同品牌路由器的Web后台结构、登录逻辑、页面元素差异极大,没有通用的万能脚本。这里以基于Selenium的浏览器自动化为例(需提前安装依赖),给出通用实现框架:
1. 前置准备
# 安装Selenium模块 Install-Module -Name Selenium -Force -AllowClobber
下载对应浏览器的驱动(如ChromeDriver),放到PowerShell可直接访问的路径。
2. 登录并跳转防火墙选项卡示例
# 初始化Chrome浏览器驱动 $driver = Start-SeChrome # 打开路由器配置页(替换为你的路由器实际地址) $driver.Navigate().GoToUrl("http://192.168.1.1") # 输入用户名密码(需根据页面元素ID/名称修改) $usernameField = $driver.FindElementById("username") $usernameField.SendKeys("admin") $passwordField = $driver.FindElementById("password") $passwordField.SendKeys("your-router-password") # 点击登录按钮(用XPath定位,需根据页面实际结构调整) $loginBtn = $driver.FindElementByXPath("//button[@type='submit']") $loginBtn.Click() # 跳转防火墙选项卡(用链接文本定位,需匹配页面实际标签) $firewallTab = $driver.FindElementByLinkText("防火墙") $firewallTab.Click()
注意:若路由器有验证码、动态Token验证,Web自动化难度会大幅提升,建议优先查看路由器是否支持SSH/API管理,这比Web自动化更稳定可靠。
二、test.txt解析与增量规则创建
1. 约定test.txt格式
先定义test.txt每行的规则格式为:规则名称,目标IP/网段,目标端口,协议(TCP/UDP),示例内容:
阻止淘宝访问,111.206.214.0/24,80,HTTP 阻止游戏服务器,123.123.123.123,443,TCP
2. 增量检测逻辑
用本地文件last_processed_rules.txt记录上次处理过的规则,每次运行时对比筛选新增内容:
$testFile = ".\test.txt" $lastRunFile = ".\last_processed_rules.txt" # 读取当前test.txt的所有规则 $currentRules = Get-Content -Path $testFile -ErrorAction Stop # 读取已处理规则,若记录文件不存在则初始化空数组 $processedRules = if (Test-Path $lastRunFile) { Get-Content $lastRunFile } else { @() } # 筛选新增的非空规则 $newRules = $currentRules | Where-Object { $_ -notin $processedRules -and $_ -ne "" }
3. 创建出站防火墙规则
如果是操作Windows本地防火墙,直接用New-NetFirewallRule命令:
foreach ($rule in $newRules) { # 拆分规则参数并去除多余空格 $parts = $rule -split "," | ForEach-Object { $_.Trim() } $ruleName = $parts[0] $remoteAddress = $parts[1] $remotePort = $parts[2] $protocol = $parts[3] # 创建出站阻止规则 try { New-NetFirewallRule -DisplayName $ruleName -Direction Outbound ` -RemoteAddress $remoteAddress -RemotePort $remotePort ` -Protocol $protocol -Action Block -Enabled True Write-Host "成功创建规则:$ruleName" } catch { Write-Host "创建规则$ruleName失败:$_" } } # 更新已处理规则记录文件 $currentRules | Out-File -Path $lastRunFile -Force
如果是操作路由器的防火墙,需替换为路由器支持的方式(如SSH登录后执行CLI命令、调用厂商API),具体逻辑必须参考路由器官方文档。
三、脚本优化建议
- 路由器账号密码等敏感信息不要硬编码,可存入环境变量或加密文件。
- 增加错误捕获逻辑:处理test.txt不存在、格式错误、路由器连接失败等异常场景。
- 优先选择路由器API/SSH管理方式,替代Web自动化,提升稳定性和执行效率。
内容的提问来源于stack exchange,提问作者SLEStyler
相关产品推荐
相关产品推荐

