来源: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 原文链接

本文由自动聚合程序取自网络,内容和观点不代表数字时代立场

定期获得翻墙信息?请电邮订阅数字时代