用 Flora_Pac.py 生成自动翻墙的 pac 文件
源于人们对自由的向往,翻墙技术已渐趋成熟。愿意花点钱,购买海外 VPN 和 ssh 主机用于自由获取信息是目前比较有效的手段。如我之前文章中提及,这两种方式都有需要筛选出那些网站在墙外,那些网站在墙内,以较节约、高速的方式访问网络。八仙过海,各显神通,不少帮助人们解决这一问题,降低翻墙门槛的小项目出现了。较具代表性的有 chnroutes(http://code.google.com/p/chnroutes/) 项目和 autoproxy-gfwlist(http://code.google.com/p/autoproxy-gfwlist/) 项目。前者修改路由表,配合各种 VPN 使用,后者可以配合 AutoProxy for Firefox(https://addons.mozilla.org/firefox/addon/11009) 或导出(https://autoproxy2pac.appspot.com/)为 pac 文件,配合各种代理服务器,包括 ssh -D 使用。他们的原理稍有差异,chnroutes 只区分国内外 IP 段,让国外地址全部走翻墙路线,autoproxy-gfwlist 项目则精确记录着那些网站被墙。
我以往喜欢 ssh -D 生成 SOCKS 代理后,搭配自己的 pac 文件翻墙。最近由于各种原因转到了 VPN 阵营。感觉 VPN 搭配 chnroutes 的确很舒服,不用再关心那些网站被墙,不会因为 gfwlist 更新延迟而影响访问。于是我在想,有没有办法让使用 ssh -D 或者其他翻墙代理的用户能和使用 VPN 的用户那样省心呢?于是我站在巨人的肩膀上,基于 chnroutes 项目,结合 pac 文件的 dnsResolve() 和 isInNet() 函数,开发了 Flora_Pac 这个小项目。
Flora_Pac 使用 Python 开发,能自动抓取 apnic.net 的 IP 数据,找出所有国内的 IP 地址段,生成能让浏览器自动判断国内外 IP 地址的 pac 文件,让代理用户有等价于 VPN + chnroutes 的翻墙体验。Flora_Pac 使用十分简单,兼容各种平台:
####### 获得帮助: $ python flora_pac.py -h usage: flora_pac.py [-h] [-x [PROXY]] Generate proxy auto-config rules. optional arguments: -h, --help show this help message and exit -x [PROXY], --proxy [PROXY] Proxy Server, examples: SOCKS 127.0.0.1:8964; SOCKS5 127.0.0.1:8964; PROXY 127.0.0.1:8964 ####### 生成 pac 文件,国外 IP 通过代理 SOCKS 代理 127.0.0.1:8964 访问: $ python flora_pac.py -x 'SOCKS 127.0.0.1:8964' Fetching data from apnic.net, it might take a few minutes, please wait... Rules: 3460 items. Usage: Use the newly created flora_pac.pac as your web browser's automatic proxy configuration (.pac) file. ####### 生成 pac 文件,国外 IP 通过代理 HTTP 代理 127.0.0.1:8964 访问: $ python flora_pac.py -x 'PROXY 127.0.0.1:8964' Fetching data from apnic.net, it might take a few minutes, please wait... Rules: 3460 items. Usage: Use the newly created flora_pac.pac as your web browser's automatic proxy configuration (.pac) file.
程序跑完后,就会在当前目录产生 flora_pac.pac 文件,把它设为浏览器或系统代理设置的 pac 文件即可。
项目代码我放在 github 上开源了:https://github.com/Leask/Flora_Pac,其中 fetch_ip_data 函数 fork 自 chnroutes 项目。
不方便上 github 的朋友,直接复制以下代码保存为 flora_pac.py 就可以跑了:
#!/usr/bin/env python # # Flora_Pac by @leaskh # www.leaskh.com, i@leaskh.com # # based on chnroutes project (by Numb.Majority@gmail.com) # import re import urllib2 import argparse import math def generate_pac(proxy): results = fetch_ip_data() pacfile = 'flora_pac.pac' rfile = open(pacfile, 'w') strLines = ( "// Flora_Pac by @leaskh" "\n// www.leaskh.com, i@leaskh.com" "\n" "\nfunction FindProxyForURL(url, host)" "\n{" "\n" "\n var list = [" ) intLines = 0 for ip,mask,_ in results: if intLines > 0: strLines = strLines + ',' intLines = intLines + 1 strLines = strLines + "\n ['%s', '%s']"%(ip, mask) strLines = strLines + ( "\n ];" "\n" "\n var ip = dnsResolve(host);" "\n" "\n for (var i in list) {" "\n if (isInNet(ip, list[i][0], list[i][1])) {" "\n return 'DIRECT';" "\n }" "\n }" "\n" "\n return '%s';" "\n" "\n}" "\n"%(proxy) ) rfile.write(strLines) rfile.close() print ("Rules: %d items.\n" "Usage: Use the newly created %s as your web browser's automatic " "proxy configuration (.pac) file."%(intLines, pacfile)) def fetch_ip_data(): #fetch data from apnic print "Fetching data from apnic.net, it might take a few minutes, please wait..." url=r'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' data=urllib2.urlopen(url).read() cnregex=re.compile(r'apnic\|cn\|ipv4\|[0-9\.]+\|[0-9]+\|[0-9]+\|a.*',re.IGNORECASE) cndata=cnregex.findall(data) results=[] for item in cndata: unit_items=item.split('|') starting_ip=unit_items[3] num_ip=int(unit_items[4]) imask=0xffffffff^(num_ip-1) #convert to string imask=hex(imask)[2:] mask=[0]*4 mask[0]=imask[0:2] mask[1]=imask[2:4] mask[2]=imask[4:6] mask[3]=imask[6:8] #convert str to int mask=[ int(i,16 ) for i in mask] mask="%d.%d.%d.%d"%tuple(mask) #mask in *nix format mask2=32-int(math.log(num_ip,2)) results.append((starting_ip,mask,mask2)) return results if __name__=='__main__': parser=argparse.ArgumentParser(description="Generate proxy auto-config rules.") parser.add_argument('-x', '--proxy', dest = 'proxy', default = 'SOCKS 127.0.0.1:8964', nargs = '?', help = "Proxy Server, examples: " "SOCKS 127.0.0.1:8964; " "SOCKS5 127.0.0.1:8964; " "PROXY 127.0.0.1:8964") args = parser.parse_args() generate_pac(args.proxy)
我想,应该过不了多久就要解放了。期待着有那么一天:我们能一起呼吸自由的空气,我们不再需要折腾各种翻墙玩意。那时,生活应该会更美好一些吧。
中国翻墙网民状况调查
中国,被屏蔽的网站越来越多,敏感词列表也不断地加长,像“胡萝卜”、“温习”这样的关键词也遭到重置。翻墙上网成为了很多网民的基本需求,不翻墙很难完全享受互联网带来的改变。
到底中国有多少网民在翻墙,恐怕连GFW也不能统计出确切的数字。10天前,我发起了一个中国翻墙网民状况的调查,目前已经收到了5300多份数据。这篇文章将公布这些数据,并稍加分析。
值得注意的是,参与这次调查的网民主要来源于Twitter、网易微博、腾讯微博、人人网、可能吧读者,还有一些协助宣传的个人博客。所以这次调查的结果可能不能完全反应中国翻墙网民的现状,只能作为一个小小的参考。
一、性别
在参与调查的翻墙网民里,男性占据了92%,女性仅占8%。
二、学历
在学历方面,最高学历是本科或大专的人占了73%,是翻墙的主力军。小学学历的人群有4%,初中有2%,高中为9%。11%的人拥有硕士学位,博士为2%。
可以看出,翻墙的人群大多数都拥有或正在接受相对较高的教育。
三、年龄
统计得出,年龄在19-28这10年内的翻墙用户占了77%,而在这群年轻的翻墙主力军里,22-25岁的人占大多数。下图为年龄分布的曲线图。
值得注意的是,15岁以下和40岁以上的翻墙者也不少。
四、职业
翻墙的人群里,将近50%是在校学生。IT行业(包括软硬件和互联网产品相关)占了20%,金融相关行业的人也不少。
五、地区
广东、北京、上海、江苏、江苏、山东、浙江、湖北的人最经常翻墙。这部分数据的参考价值可能不大,因为这些数据与调查派发的来源相关性过大。
六、工作年龄
因为大多数翻墙者为学生,所以在工作年龄这一项里,48%的人工作年龄为0,这与第四点里的调查数据吻合。
10%的人有1年的工作经验,10年以上工作经验的人有8.13%,是一个不小的比例。
七、翻墙方式
翻墙显然不能没有工具。那么,人们都在用什么工具翻墙?这是一道多选题,总百分比超过100%,因为很多人不止有一种翻墙工具。
统计表明,5%的人使用的是自家公司的内部VPN翻墙。很多公司,比如Google、腾讯都提供公司内部VPN。要是不能翻墙的话,这些公司产品方面的业务很难开展。
16%的人自己购买VPN翻墙。
24%的人使用SSH翻墙。SSH翻墙是在这大半年里开始流行的翻墙方式。
有37%的人使用在线的网页代理,虽然这种方式比较古老,但是是最快捷的。
最多人使用的是自由门、无界浏览、Puff等翻墙工具,71%的人使用这些工具来翻墙。这些工具都是免费的,而且使用起来非常简单,在windows里,几乎不需要做太多设置就能使用。
有15%的人勾选了“其它”翻墙方式,在“其它”里,很多人填写了“GAppProxy”,这种方式使用起来也非常简单,只需申请一个免费的Google App Engine空间,配合GAppProxy客户端即可完成翻墙。
八、翻墙频率
2/3的人每天都会翻墙,7.5%的人每两天才翻一次,每周翻墙1-3次的占16.65%,是不小的比例。
九、翻墙花费
因为很多人使用的是像无界浏览这样的免费翻墙工具,所以大多数人翻墙并不花钱。也有人使用较为廉价的翻墙工具。统计表明,88%的人每月在翻墙上的花费少于10元。
10-50元的占了10%左右。
也有0.2%的人每月花费200元以上来翻墙。
十、翻墙年龄
27%的人翻墙年龄不到一年,随着中国封锁的网站越来越多,我相信这个比例会越来越大。当然,或许世博会期间会少一些。
翻墙年龄在1-3年的占了52%,其中有2年翻墙年龄的人占大多数。
有2.24%的人已经翻墙9年,GFW是1998年启动的金盾工程的一部分。据维基百科记载,90年代中国只有IP封锁,在2002年,GFW新加入了关键词过滤和DNS污染机制。
十一、为什么翻墙?
翻墙为了什么?翻墙干什么?
80%的人翻墙仅仅是为了“正常”地使用Google等互联网基础服务,他们或许只是想正常地搜索“胡萝卜”。
75%的人翻墙会上Twitter等社交网站,72%的人会看外媒的新闻。60%的人翻墙是为了娱乐,比如观看Youtube。
因为国内的互联网产品行业相对落后,而优秀的外国互联网产品往往又是被屏蔽,很多人翻墙是为了学习外国的互联网产品,这个比例占了52%。
30%的人翻墙会上成人网站。
另外有26%的人工作必须翻墙。
十二、是否向朋友宣传翻墙?
你是否告诉过你的朋友GFW的存在?
85%的人表示他们曾经向朋友介绍过GFW和宣传过如何翻墙。
十三、对GFW的态度
并非所有人都不愿意接受互联网审查。
将近50%的受访者认为,互联网审查应该有明确的法律,而非暗箱操作。
38%的人认为应该完全取消GFW。
我个人是50%之中的一员,审查必须有明确的大众标准,不能以领导人的喜怒哀乐为参考。
十四、如何得知墙的存在?
人们主要通过3个渠道知道GFW的存在,论坛占了19%,博客是主要的信息来源,占了37%。另外还有28%的人通过搜索得知GFW的存在。
十五、精彩言论
在这份调查里,我留了一个让受访者自由发挥的空间,让我们来看看他们都说了些什么:
1、那是最美好的时期,那是最堕落的时期;那是智慧的岁月,那是没有开化的岁月;那是信仰坚定的时代,那是怀疑一切的时代;那是阳光明媚的季节,那是黑夜深重的季节;那是满怀希望的春天,那是令人绝望的冬天;人们拥有一切,人们一无所有;人们直入天堂,人们直堕地狱。(《双城记》)
2、"07-08年间在一家规模比较大的媒体公司工作。10人的编辑部门约2人知道如何使用翻墙工具。后来离职。部门有一同事长期联络,到了09年再次见面,给她演示了下自由门,她说:“从未使用过,也从来不知道gfw的存在。每天在媒体的工作,从来不需要翻墙。” 身边的朋友,除了经常关注国外媒体、民主这部分内容的人群,绝大多数人是不知道何谓翻墙,更不需要使用翻墙来绕过gfw。家里,我和先生每天都使用自由门。因为2010年google撤离事件,现在使用google搜索必须开着翻墙软件,以保证链接不被重置。"
3、1995年上网,因为兴趣爱好需要经常的查询一些国外的专业学术资料,所以翻墙已多年。起初是敏感的政治性网站被墙,但是从2003年开始情况变得非常的糟糕了,很多的国外学术网站都上不去了,于是开始憎恶GFW。继而从最初对GFW的不满转变成对整个体制的不满,近几年发现自己开始有政治倾向,实属无奈,这都是被逼的。
4、gfw的存在,体现了当前政府对互联网并没有完整的掌控能力,即并没有一个足够有效的方法来对中国的互联网进行规范。盲目地只针对国内外的消息进行封锁只会导致中国高端人才对这个政府的厌烦,不利于中国的发展。
5、翻墙表明我具有独立的人格与探求事实真相的权力。拒绝任何人或团体主导我的思维与判断。 翻墙,是表明我首先是个地球人,之后才是中华人民共和国的草民。
6、GFW太吓人了,我去看F1技术专家的blog要翻墙(因为它是直接挂在wordpress上的),连全世界最权威的F1网站autosport.com的全部图片也都被墙掉了,真是不可理喻
7、GFW无过,错只在于少部分人将自己的意愿强加于所有人,这是封建皇权统治的遗风。我们应从贯彻违宪审查、修正人大代表选举方式等方面对政府的权力加以限制,以维护民主制度。国家需要稍加按摩,放松一下了。
8、GFW这种状态其实就是在高墙边上留了一条小道,你只要不太过分,修墙的也就不会理你
9、本来我是不知道翻墙的,翻墙是因为当我在腾讯里发现卫生巾都是敏感词时,姐觉得活得没有尊严,连卫生巾都屏蔽了,我还是女人吗?
10、翻墙年龄记录不太清了,01年-04年在报箱收到一个光盘,内容是辛颢年讲座《谁是抗日战争的中流底柱》,附赠无界、自由门,当时试了下,就马上关掉了。几年之后翻墙才比较经常。friendfeed被墙后,开始每日必翻。
11、互联网同其他媒体一样,不可能放任其随意发展的,各个国家都是如此。但不应该像中国这样,控制互联网已经到了登峰造极,以至影响到中国互联网深层发展的程度。
12、每每看到连接被重置,看到五毛众,看到一个不相干的却可能被和谐的词,看到照旧有很多猥琐到极点的标题或图片在GFW监管范围内却活得很好…… 我从以前很气氛到现在可以平常心看待,麻木了还是成长了
13、目前身在美国读书,即将毕业。过去两年在国外和放假回国的对比体验非常强烈。我可以明确地说国内互联网使用的不自由是促使我尽可能在美国找工作留下的一个很重要的原因。
14、希望FGW下次打飞机的时候把GFW给打掉
15、我就是传说中的职业五毛党了~ 不过这跟我的立场无关~ 另外,“五毛党”没有你们想象的那么恶劣,其实我们引导舆论的团队,内部没几个人自己愿意干这个事情的,做公务员混饭吃没办法~
十六、我的翻墙之路
我是2005年左右开始频繁翻墙的,当时使用的是无界浏览,后来也尝试了自由门、世界通、火凤凰等软件。
后来,我开始使用GAppProxy,因为这是使用Google作为代理,速度特别快。但缺点是不稳定,不能下载大文件。
接着,我在自己的PHP空间上搭建了PHProxy,使用网页代理翻墙。
2009年,我开始使用SSH翻墙。为了追求高速度和稳定性,我和一帮朋友专门合租了一台VPS来翻墙。
2010年,我买了一个香港的高价VPN,专门给手机翻墙。现在,我可以在iPhone上自由地看Youtube视频。
现在,我有2个SSH帐号、4个VPN帐号。基本不会有翻不了墙的时候,除非白名单制度降临。
在绝对多数的情况下,我翻墙只是为了正常使用像Google、Twitter这样的服务,真的。