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

时间:2015-11-02 23:22:29

标签: windows batch-file automation network-programming vpn

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

我是如何做到这一点的是在启动时运行批处理文件,它自动路由一组给定的所有ip地址    域。

  • 独立于默认网关地址
  • 独立于正在使用的网络适配器
  • 在域名更改IP地址
  • 后不需要调整
  • 处理整套域名ip地址(nslookup?)

这是我通过反复试验提出的。

@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上发现的片段创建的一些可怕的frankenstein代码。它现在有效,但我怎样才能让它更优雅?第二个和第三个FOR循环可以组合成一个吗?我如何制作它,以便如果我要添加一个新域我可以将它添加到列表而不是添加另外2个FOR循环?

1 个答案:

答案 0 :(得分:1)

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

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路由的网关,并使用它来添加指定域的路由,通过nslookup获取其IP地址。

计划在通过Task Scheduler -> Microsoft -> Windows -> Ras与触发器On an event / Application / RasClient / 20225建立连接时运行。