脚本来自于:http://code.google.com/p/chnroutes/
它是透过APNIC公开的资料库找出所有大陆地区的IP网段,然后透过ip-up ip-down脚本,在连上VPN之后自动将这些大陆IP网段设置走预设路由(例如电信ADSL网关或公司网关),而其余的IP网段则走VPN网关,在VPN断线之后这些路由调整又会自动改回来,一切非常自动化。
运行以下python脚本,会生成4个文件,一般情况下,只需要在没开VPN的时候运行vpnup.bat即可。
#!/usr/bin/env python
import re
import urllib
VPNUPBASE="""@echo off
for /F "tokens=3" %defaultgateway in ('route print ^| findstr "\<0.0.0.0\>"') do set "gw=%defaultgateway"
"""
url=r'http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst'
handler=urllib.urlopen(url)
upfile=open('vpnup.bat','w')
downfile=open('vpndown.bat','w')
upfile.write(VPNUPBASE)
upfile.write('\n')
upfile.write('ipconfig /flushdns\n')
downfile.write("@echo off")
downfile.write('\n')
for line in handler.readlines():
if line.find(': cn ') < 0: continue
r=line.split(':')[1]
r=r.strip()
ip,mask=r.split('/')
ip=ip.split('.')
while len(ip) < 4:
ip.append('0')
mask=int(mask)
bm='1'*mask+'0'*(32-mask)
mask="%d.%d.%d.%d"%(int(bm[0:8],2),int(bm[8:16],2),int(bm[16:24],2),int(bm[24:32],2))
upfile.write('route add %s mask %s %s metric 5\n'%('.'.join(ip),mask,'%gw%'))
downfile.write('route delete %s\n'%('.'.join(ip)))
upfile.close()
downfile.close()
up_vbs_wrapper=open('vpnup.vbs','w')
up_vbs_wrapper.write('Set objShell = CreateObject("Wscript.shell")\ncall objShell.Run("vpnup.bat",0,FALSE)')
up_vbs_wrapper.close()
down_vbs_wrapper=open('vpndown.vbs','w')
down_vbs_wrapper.write('Set objShell = CreateObject("Wscript.shell")\ncall objShell.Run("vpndown.bat",0,FALSE)')
down_vbs_wrapper.close()
print "Usage: copy vpnup.bat vpnup.vbs vpndown.bat vpndown.vbs to the openvpn config dir," \
" and then append the following two lines to the ovpn config file:" \
"\n up vpnup.vbs" \
"\n down vpndown.vbs"
2011-01-14 13:48:11