用于绕过某些域的 VPN 的批处理脚本

Batch script to bypass VPN for certain domains

我使用 VPN 服务已有一段时间了,但有些网站 (twitch.tv) 不允许我通过 VPN 连接到它们。所以我在 Windows 上查找了如何绕过这些域的 VPN,并找到了静态路由。

我想做的是在启动时使用批处理文件 运行 自动路由一组给定的所有 IP 地址 域。

这是我通过反复试验得出的结论。

@echo off

FOR /F "tokens=3" %%F in (
    'route print ^|findstr "\<0.0.0.0\>"'
) Do if not defined DefaultGateway set "DefaultGateway=%%F"

FOR /F "tokens=2" %%F in ('nslookup twitch.tv') DO (
    SET var1=%%F
)
route -p add %var1% mask 255.255.255.255 %DefaultGateway%

FOR /F "skip=5 tokens=1" %%F IN ('nslookup twitch.tv') DO (
   route -p add %%F mask 255.255.255.255 %DefaultGateway%
)

我想你可以看出这是我根据在 SO 上找到的片段创建的一些可怕的弗兰肯斯坦代码。它现在有效,但我怎样才能让它更优雅呢?第二个和第三个FOR循环可以合二为一吗?我该怎么做才能在添加新域时将其添加到列表中而不是再添加 2 个 FOR 循环?

我一直在使用这个批处理文件:

set domains=twitch.tv google.com some-domain.com

for /f "tokens=3" %%a in ('route print ^| findstr "\<0.0.0.0\>"') do (
    for %%d in (%domains%) do (
        for /f "tokens=1,2 skip=4" %%b in ('nslookup %%d 2^>nul') do (
            if "%%c"=="" (route add %%b %%a) else (route add %%c %%a)
        )
    )
    goto done
)
:done

它获取第一个 0.0.0.0 路由的网关并使用它来添加指定域的路由,它们的 IP 地址通过 nslookup 获得。

并且它被安排为 运行 每当通过 Task Scheduler -> Microsoft -> Windows -> Ras 与触发器 On an event / Application / RasClient / 20225 建立连接时。