来源:http://blog.csdn.net/lzsdc/article/details/6765767
欢迎访问墙外站:http://lzsblog.appspot.com/?p=291001
ZZJ于8月17日提出用gfwList的网址通过可信的DNS转换成IP,写入hosts文件进而实现翻墙的方法。鄙人通过Python脚本进行了实现。代码丑陋望大牛指教。
import sys,DNS,base64 def splitList(txt): arr = txt.split("n") l = [] for line in arr: if (not len(line)): #empty line continue if (line[0] == "!"): #Comment line continue elif(line[0:2] =="@@"):#Forbidding line continue elif(line.find("/")!=-1 or line.find("*")!=-1): #URL is ignored, only domains left continue #In this case, domain name is irrelevant to protocol(http or https) elif(line[0:2] =="||"): l.append(line[2:]) elif(line[0] == "."): l.append(line[1:]) else: l.append(line) return l #Decode and decorate the input string f = open("gfwlist.txt","r") txt = f.read().replace("n","") txt = base64.decodestring(txt) domains = splitList(txt) #Set default DNS server DNSServer=['8.8.8.8'] DNS.defaults['server']=DNSServer DNS.DiscoverNameServers() #These two varible are used to track the percentage of parsing process. l = 0 a = len(domains) for line in domains: request=DNS.Request() try: result=request.req(name=line,qtype="A") except DNS.Base.DNSError: msg=line+"tTime Outn" else: if not len(result.answers): msg=line+"tNo recordn" else: msg=line+ "tBingon" print line + " " + result.answers[0]["data"] print >> sys.stderr, line + msg, l*1.0/a, "%"
代码文件:makeIP.py(墙外)
文中使用了模块pyDNS,这一非标准模块需要到http://pydns.sourceforge.net/下载。
解压后安装,python setup.py install。
然后运行程序,只需要将标准输出重定向到指定文件即可。python makeIP.py > hosts
接一句Fvck GFW
PS:21:51更新,增加了过滤CNAME记录的功能,解决有跳转网站的解析问题,请下载最新的代码文件
作者:lzsdc 发表于2011-9-10 13:25:19 原文链接
本文由自动聚合程序取自网络,内容和观点不代表数字时代立场