You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:15:18