rendered paste body#!/usr/bin/env python# -*- coding: utf-8 -*-# 使用方法:# 1. 运行本script将成两个文件, vpnup和vpndown# 2. 执行 chmod a+x vpnup; chmod a+x vpndown 让文件变成可执行# 3. 把这两个文件copy到openvpn客户端配置文件所在目录# 4. 编辑openvpn客户端配置文件. 加上两行命令: up vpnup 和 down vpndown# 如果之前没有配置(服务端或者客户端)使用vpn server作为default gateway# 那么请在配置文件上加上一行 redirect-gateway. 最后保存, 重连openvpn# 注意: 最好在服务端使用 push 命令修改一下dns, 否则使用原有的dns也还是会被劫持的.# 如果不能控制服务器, 在客户端配置里也务必设置.import reimport urlliburl=r'http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst'VPNUPBASE=""" #!/bin/shexport PATH="/bin:/sbin:/usr/sbin:/usr/bin"PSID=$( (scutil | grep PrimaryService | sed -e 's/.*PrimaryService : //')<< EOFopenget State:/Network/Global/IPv4d.showquitEOF)OLDGW=`netstat -nr | grep '^default' | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+.[0-9]\+'`if [ ! -e /tmp/openvpn_oldgw_${PSID} ]; then echo "${OLDGW}" > /tmp/openvpn_oldgw_${PSID}fi"""VPNDOWNBASE=""" #!/bin/shexport PATH="/bin:/sbin:/usr/sbin:/usr/bin"PSID=$( (scutil | grep PrimaryService | sed -e 's/.*PrimaryService : //')<< EOFopenget State:/Network/Global/IPv4d.showquitEOF)if [ ! -e /tmp/openvpn_oldgw_${PSID} ]; then exit 0fiODLGW=`cat /tmp/openvpn_oldgw_${PSID}`"""handler=urllib.urlopen(url)upfile=open('vpnup','w')downfile=open('vpndown','w')upfile.write(VPNUPBASE)upfile.write('\n')downfile.write(VPNDOWNBASE)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('.') if len(ip) < 4: ip.append('0') #生成的脚本所用的route命令是针对mac osx的. linux下的大概会有所不同, 需要适当修改以下两句 upfile.write('route add %s/%s ${OLDGW}\n'%('.'.join(ip),mask)) downfile.write('route delete %s/%s ${OLDGW}\n'%('.'.join(ip),mask))downfile.write('\n\nrm /tmp/openvpn_oldgw_${OLDGW}\n')upfile.close()downfile.close()