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


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


    1. set user=xxx       //你的vpn用户名   


    1. @Rem 密码   


    1. set pass=xxx           //你的vpn密码   


    1. @Rem 拨号文件名   


    1. set NIC_name=VPN        //注意这个nic_name一定要和你创建的网络vpn连接的名字一样,否则无法连接成功   
    2. echo 正在VPN连接...   
    3. rasdial %NIC_name% %user% %pass%     //rasdial为自动拔号命令   
    4. 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地址)   


    1. echo %ip%   
    2. route delete 0.0.0.0 mask 0.0.0.0 %ip% METRIC 1    //这句就是删除缺省指向vpn内网的路由   
    3. route add 192.168.21.0 mask 255.255.255.0 %ip% METRIC 1    //以下是添加需要访问的内网地址段   
    4. 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自动拔号同时内网和外网分离的代码就分享到这里。希望大家方便使用。