用批处理(bat)语言编写VPN自动拔号程序

本文分享一个用批处理(bat)语言编写VPN(Virtual Private Network)自动拔号程序。相信大家都在使用VPN拔号的时候都遇到一个问题,如果使用创建的vpn网络连接直接拔号的话,会导致一个问题公司内网是不能上外网的,而你本地的网络是可以上外网,但是当你拔号连接上公司的内网时所有的数据都通过vpn接口转发出去,而不是走你本地网络,这样就导致无法上网,只能上公司内网。今天分享的vpn自动拔号代码,即可以解决这个问题,而可以解决另一个问题就是方便使用,可要双击bat文件就可以自动拔号,不用手动输入用户名和密码信息。
首先:创建一个文本文件。
其次:在文本文件中输入如下代码:

    1. @echo off
    2. @Rem 用户名
    1. set user=xxx       //你的vpn用户名
    2. @Rem 密码
    1. set pass=xxx           //你的vpn密码
    2. @Rem 拨号文件名
    1. set NIC_name=VPN        //注意这个nic_name一定要和你创建的网络vpn连接的名字一样,否则无法连接成功
    2. echo 正在VPN连接...
    1. rasdial %NIC_name% %user% %pass%     //rasdial为自动拔号命令
    2. echo 已经连接.
    1. for /f "tokens=1* delims=:" %%i in ('ipconfig /all^|find "192.168.123"') do set ip=%%j   //过滤出ipconfig命令输出的信息包含192.168.230这个地址段的信息(这个ip段就是你连接vpn成功后vpn服务器分配的内网ip地址)
    2. echo %ip%
    1. route delete 0.0.0.0 mask 0.0.0.0 %ip% METRIC 1    //这句就是删除缺省指向vpn内网的路由
    2. route add 192.168.21.0 mask 255.255.255.0 %ip% METRIC 1    //以下是添加需要访问的内网地址段
  1. route add 192.168.13.0 mask 255.255.255.0 %ip% METRIC 1

前面的代码中都有相关参数的解析,这里就不多做介绍了,主要介绍一下如果配置将内网和外网数据分离,实现即可以上外网又可以访问公司内网(当然要保证你的本地是可以上外网的),以下代码中最后route部分就是解决这个问题的:

  1. route delete 0.0.0.0 mask 0.0.0.0 %ip% METRIC 1

这条命令的作用是删除vpn连接成功后自动创建缺省路由网关是指向vpn地址的那条缺省路由,后面的%ip%就是前面通过过滤ipconfig输出信息中包含vpn服务器分配的内网ip。删除这个缺省路由后,缺省路由的网关会自动切换到原来本地接口所指向的网关,这样就实现了所有数据都是通过本地的接口转发,而不是能过vpn通道来转发。有人就会问那启不是只能上外网又不能上内网了,也没有意义。没错,接下来就要添加可以通过vpn通道访问的公司内网的相应内网网段地址如下:

  1. route add 192.168.21.0 mask 255.255.255.0 %ip% METRIC 1
  2. route add 192.168.13.0 mask 255.255.255.0 %ip% METRIC 1

这段代码中就添加了192.168.21.0和192.168.13.0两个数据中心内网网段地址段,当然你还可以继续添加你想访问的公司内网地址段。
最后命名任意保存为.bat的文件,例:vpn.bat。
到这里通过bat语言编写的vpn自动拔号同时内网和外网分离的代码就分享到这里。希望大家方便使用。

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  2   博主  1

    • avatar 匿名 5

      经测试,带着后面的注释执行,不成功啊,去掉就OK,有什么方法可以使注释不执行那?

        • 激劉勇靖 激劉勇靖 Admin

          @匿名 那个注释要去掉 我只是为了方便大家解读所以为每个语句添加注释。

        • avatar vfhky 0

          这个真实用,博主很牛啊!