Author Archive

西厢计划 MacOSX 移植版

October 29, 2011 Leave a comment

最近关注了一个西厢计划 MacOSX 的移植项目 kernet (link:。技术上,kernet 项目做得比原始的西厢计划还要多,可用性也有很大的提高。

最近我做了一个稳定版,主要是增强了稳定性,并支持更多站点。因为个人博客上相关主题较多,所以在这里发布下。如果又更新,我会最先在我的twitter(link:!/liruqi) 上说。


系统要求:Lion 64位。低版本没测试过。32位的系统应该跑不了,不过自己拿xcode 用源代码(link: 编译打包也不难。

跟上一个发布的不靠谱版本(link: 相比,
1。回归到 master 可用版本做的修改
2。支持更多站点。手动增加的站点是 *。这里有一个通过跑脚本,增加的站点列表:

还是说明下,我不能保障你正确安装之后就一定能访问列表中所有站点。参考这篇 总结(link:

PS1: 最近做 kernet 打包的同时,对 GFW 做了些有意思的统计。(统计基于 gfwlist.txt,结果不完整不精确,但是正确率应该是大于 50%的;大家也可以看我 stable 分支脚本自己做测试)

PS2: 算是一个坏消息吧。最近域名封锁、ip 封锁逐步开始了。网络白名单制度大概已经步入实施阶段了。
a)域名封锁是指不再搞dns缓存污染,dns缓存污染是dns-query 被gfw抢答了,还能获得正确返回的;而域名封锁,是直接丢包(目前这种现象并不是每个网络运营商都会有)。这种封锁可能是最近才有的。
b)ip 封锁比较明显的是 tumblr。

Categories: gfw

West chamber season 3 – a new way to bypass Great Firewall

July 30, 2011 1 comment

(I don’t quite believe, I edit this post in google docs, and it is open for anyone to edit. I am not used to write in English, if you find mistakes please correct it for me in google docs. I may update here periodly based on the google docs one.)

Everyone knows that Chinese from mainland China have problem accessing international internet – the World Wide Web, e.g, Facebook, Twitter, and many services provided by Google. Here I provide a new a way to drop the threat of “connection reset”, without proxy server, and it is free.

The Great Firewall of China

Normally, we illustrate the Great Firewall(GFW) with the Great Wall of China:

But technically, GFW does not simply work like a wall. The commonly-used technical methods are IP blocking, DNS cache poisoning, connection reset, (ref wikipedia Great Firewall of China). And connection reset is now the most import part that works.

Technical details of connection reset

Why choose connection reset? For web sites, IP may change, and normally domain do not, it’s a big overhead to maintain an IP list of domains; and DNS cache poisoning can be bypassed by changing a hosts file for local name resolution. Connection reset is, somehow an elegant way to block the unwelcome sites (of course, unwelcomed by Chinese goverment).

When GFW detect sensitive words from site url or site content, it will send reset packet to both client and web server, thus, both client & web server give up the connection, and “Error 101 (net::ERR_CONNECTION_RESET): The connection was reset.” come to your chrome browser. This works like cheating, not blocking.

The scholarzhang project

There is nearly no way to bypass GFW without proxy servers (strictly speaking, bypass var p2p network, is also implemented by proxy, the different is that any node in p2p network may be the server, server is not fixed). Servers cost money, and there must be someone to pay for it.
Scholarzhang is a great attempt to build tool to bypass directly without intermedia server. It’s trying to save connection before reset package is sent by GFW. The theory is sophisticated, and it meet many restrictions(ref README, I wish some one could translate it to English). Now, the tools provide by scholarzhang hardly work anymore.

West chamber season 3

This project is mainly inspired by and inherited from scholarzhang. The theory is simple: drop the cheating packages send by GFW on both sides – server and client. Currently I have got a working prototype. If you are in China mainland, you should not be able to visit directly. But if install client by this install guide, then you should be.

But I need help:

  1. Spread and promote this project. It need client and web server cooperate, without either side, this will not work. Especially If you can directly contact the webmaster or system administrator of a blocked site, persuade him/her to do this! This will bring them lots of Chinese users.
  2. Find more specific rules of GFW. Currently, On the server, I simply drop reset packet from China; On the client, I simply drop reset packet from China. I wonder how risky of doing this. I wish to reduce the negative impact to minimum.
  3. More test & improvement on Windows client.

Beside, anyone interested in this project, mail me! Tell me what you can do, documentation, translation, web site building & development are welcomed. I cannot finish them all by myself anyway 🙂 . Also, contact me if there is any chance for me to go abroad, to work or study on anti-GFW, for this is my interest. I also love to “make the world a more open place”, but in a different way from Mark Zuckerberg, you know.

Categories: 翻墙, gfw

西厢计划第三季 – Ignore the Great Firewall

July 22, 2011 19 comments

本文google docs 链接:


This post is inspired by

By ‘ignore’ instead of ‘bypass’, we mean working without intermedia server.scholarzhang is a great attempt, but currently it hardly work. scholarzhang contain three parts: zhang(client-side connection obfuscation), cui(server-side connection obfuscation), gfw(drop gfw dns hijacking packets) (ref 项目计划). On the client, we need to run zhang & gfw. The difficult part is that, GFW send RST packages to both ends, client & server, and Mr. zhang is trying to save reuse the connection after server received RST package(ref), 我估计 CUI 也是在尝试做类似的事情. The limitations are summarized in 项目计划:

“首先作为开发者,对于这个项目,应该消除幻觉,着眼缺点。西厢的弱点在README.wiki的局限一节已经描述得比较清楚,主要是两种问题:不稳定和易变。不稳定可能造成在使用过程中可能出现连接失败的情况,易变可能造成GFW升级之后如果西厢不升级便无法使用。不稳定是由于张某和崔某实际上做的是通过协议hacking弥补GFW造成的破坏,要求一种RFC规定的理想状况,原理就是不稳定的;而西厢的原理部分所依赖的GFW指纹和漏洞机制是易变的,需要即时更新。因此,“没有银弹”,西厢也不是对GFW的银弹,我看到自由亚洲的报道夸大其事,我想开发者关注的应该是bug才对。 “

However, if Miss Cui make a move to help Zhang in, and this will make the task much easier. In fact, Ignoring the Great Firewall of China and 西厢计划原理小解 both mention a way to ignore GFW: just ignore and drop the RST packges sent by GFW.

“大家都知道,连接被重置的本质,是因为收到了破坏连接的一个 TCP Reset 包。以前剑桥大学有人实验过,客户端和服务器都忽略 Reset, 则通信可以不受影响。但是这个方法其实只有理论价值,因为绝大多数服务器都不可能忽略 Reset 的 (比如 Linux, 需要 root 权限配置iptables, 而且这本身也把正常的 Reset 给忽略了)。”

正常的 tcp 连接的创建和结束过程中,都不需要用到 Reset。客户端直接drop 掉 Reset,一般不会有问题,至少是可以正常上网的;服务器上如果直接这么做,可能会产生一定的资源消耗。但是这种方式显然比最初始的西厢计划更有效。


在客户端和服务器上分别用 root 执行:
iptables -A INPUT -p tcp -m tcp –tcp-flags RST RST -j DROP
如果用的是 FreeBSD的 ipfw,命令换用:
ipfw add 1000 drop tcp from any to me tcpflags rst in
如果客户端用的windows,拿西厢项目中的 windows 客户端试试。

另外,客户端还可以丢弃掉gfw 发送的扰乱的 ack+rst 包,具体参考最后更新的说明:
iptables -A INPUT -p tcp -m tcp –tcp-flags RST,ACK RST,ACK -j DROP

在 google code 上已经新建项目,西厢计划第三季。项目后续会在这里更新。更详细的操作方法,参考项目wiki


1. 无法应对 IP 封锁。如果 ping IP 都超时,基本无法离开中间服务器绕墙。

2. 在多次触碰敏感词之后,GFW 会直接阻断两端通信,从而导致后续的数据无法传输。


1) 如何让服务器识别 GFW 发送的 Reset 包,而正常处理其它 Reset。很有可能的情况是,西厢 CUI 模块已经解决了这个问题,甚至服务器上直接安装 CUI 即可达到预期效果。
2) Windows 客户端的开发。linux 环境上安装 zhang 和 gfw 是相对容易的,西厢目前也有windows 客户端,但我不清楚目前可用性如何。(如果用方便翻墙作为理由推广linux 倒也不错)
3) 也是最麻烦的问题:这个方法如何推广。如果是个人的vps 上的博客域名被污染,只需要打一条命令就可以搞定;但是如何说服 facebook 在他们服务器上安装这些东西呢?这需要对 CUI 模块做认真的后续开发、测试,以及文档完善。这些准备工作做好了,如果国外的互联网公司认为中国用户足够重要,也自然会考虑这些事情。当然,客户端的推广同样重要。本文最开始打算用英文写,也是希望国外互联网公司能方便地找到这里。




本文发布当天我没有做测试。今天才找到一朋友的vps 做测试。GFW 有一个惩罚机制,大概是你连上国外服务器的,被发现触碰关键词(访问一个被污染的域名,或者交互数据中有明文的敏感词),发送 RST 之后,会在一段时间内(目前感觉大概是30秒),可能会封禁两端的通信,效果如同 ip被封禁。但是,这种惩罚机制的触发条件不太稳定。我在 Ubuntu 11.04 上的测试结果是:

  1. curl 100% 触发惩罚规则 – User-Agent: curl/7.21.3 (i686-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/ libidn/1.18\r\n
  2. chrome  和 firefox 在连续地发送大约6次http 请求撞墙之后,gfw 似乎会随机阻断若干请求,但是没触发封禁通信的处罚。


另外,我测试的域名是,这个域名已指向一个会丢弃 RST 包的主机上,供大家测试。

Categories: gfw

Happy birthday to me

July 18, 2011 4 comments

火了,刚才一点保存,什么都没了,只有一个开头,大概是1小时前的备份。以后不用 wordpress 编辑器。如果写博客,我会在 google docs 上编辑,在这里发链接。近况

Almost everything is lost after I publish this post。I did not back a backup, and using “back” button of my chromium, I cannot get my post back neither. I will not use wordpress editor from now on. If any more post, I will edit in google docs and paste the link there. Fuck!

另外,提前说一下如何访问google docs(不保证时效性)。

1. 在 上注册新浪微博帐号(如果已经注册过请忽略)

2. 在 上关注 (如果已经关注过请忽略)

3. 点击这个微博中的文章链接:

4. 根据文章提示,修改你电脑中的某个文件。

5. 如果你在新浪微博上不小心关注了这个二逼, ,取消关注加入黑名单并举报不良信息。

6. 根据这个文章(,继续修改你电脑中某个文件。

7. 前面步骤可以省略,点这个链接照做即可:

然后,你的电脑就上google docs 就飞快了!

Categories: AboutMe, Weibo


June 11, 2011 1 comment

今天在家看完了英文原版 Hackers and Painters (在线地址) 的第六章 How to Make Wealth。这本书我目前只看了第一章和第六章。因为书中一开始就说,各个章节内容相对独立,可以根据个人兴趣选择性阅读。于是我前段时间看完了第一章,然后直接跳到第六章看了。里面讲的财富和创业的概念,我觉得很不错,于是我对每一小节做了一个总结;总结的内容不全是书中原话,包含了我个人理解。当然,要真正理解这些概念,还是需要阅读原著以及其引用的相关资料。

1. 一个命题


2. 运气的成分


3. 金钱不等于财富


4. 大饼谬论


5. 手工艺人


6. 工作是什么


7. 更努力地工作

销售人员的效益很容易根据业绩量化;但大公司,开发人员需要相互配合,很难衡量每一名开发人员的实际贡献的价值,所以开发人员的收入会被平均化;优秀的 hacker 在大公司的价值难以体现。

8. 工作的可量化性和重要性 (阮一峰翻译的小标题是”可测量性和可放大性”,我认为翻译成“重要性”更好理解)


9. 小团队的工作可以量化 (小标题有改动)


10. 技术决定工作的重要性 (小标题有改动)


11. 潜规则


12. 用户数量


13. 财富和权力



1. 书中第六章提到一件事情,说是IBM 跟微软签署的DOS系统授权协议,犯了一个极大的商业错误。处于好奇心,我尝试去了解 DOS 时代的那段历史,然后一学弟推荐了一部电影,硅谷传奇 Pirates of Silicon Valley 。晚上在线看完了。其戏剧性不亚于最近的社交网络。社交网络基本上只是讲Facebook 公司的成长过程,以及那些不上进的对手;而硅谷传奇则讲述了PC 时代Apple 跟微软、IBM的创造和发展史;电影的表现手法也极其夸张。看完了电影,我才能理解国外的著名hacker 们 对苹果的狂热崇拜。那个时代的荣耀属于创造了苹果机的乔布斯,而盖茨不过是一个聪明而成功的投机商人。

2. 我觉得中国还不太适合创业。我以前接受的是马克思政治经济学,暂时也没有去了解西方国家对中国的政治、经济状态的定义。我的理解是,虽未的社会注意初级阶段,实际上是对中国处于的半封建半资本主义状态的修饰。最近几年频发经济犯罪,非法集资之类的名义,出事基本判死刑,可以说是对经济活动和个人财产赤裸裸的打劫;另外高税收也在剥削企业所创造的价值。本质上,这跟封建领主的剥削行为没多大差别。另外,创业公司还需要很谨慎地对待用户产生的内容。制度的和平演变是个循序渐进的过程,或许还有很长的路要走吧。

Categories: money

记录一下 5 月 28日 的 Google HTML5训练营

May 29, 2011 3 comments
28号星期六。我是26号经 杜欢 提醒,才想起来这回事。之前看过这个消息没报名。然后26号半夜发报名申请邮件。27号没消息,然后找Google China 的HR 帮忙问了下,相当于走后门提申请了。最近一直构思着做一个在线的劲乐团。我期待着过去之后的 hackathon 环节,能找些人一起做一下。
28号的上午一直在家做一些准备工作。劲乐团的音符数据,都是从一个开放的Be-Music Script 格式转过来的。另外,网上也有不少 O2Jam note file(.ojn, .ojm) 资源,都是二进制文件,而且不一定是开放格式,所以先不考虑了。转数据的脚本最开始是参考 github 上的一个项目 O2.js,不过这个项目现在很草稿,里面的解析脚本有问题。一上午在家,把BMS 转成 frame 位置到音符的映射表。基本可以让音符自己往下掉了。做的过程中也遇到了不少坑。比如,O2Mania 游戏中,对按键键位的定义,跟原始的BMS 格式定义不一样,导致解析后音符错位。折腾到12点半才出门。活动一点钟开始的,我估计坐公交换地铁,肯定会迟到了,于是直接打车过去。
下车之后,问人才找到地方,在一个小区里,场地是一个咖啡厅,两个房间。人挺多,看起来报名的人都有一两百,当然没全来,还有没报名现场直接签到的,有是多个人。我扫下名单,没我名字,然后在后面加上去了。我去里面房间,找一个位子坐下了。现场有免费的饮料、点心。刚好中午没吃饭,于是吃些点心充饥。我谁都不认识,刚开始也没怎么跟别人聊。过了好一会儿杜欢才来,然后讲座开始。第一个讲座是淘宝的李晶将怎么用 HTML5 做网站,讲了不少兼容性问题,我站后面跟杜欢听了下。第二讲是杜欢的,关于 HTML5 的游戏开发。第二讲和第三讲我都没仔细听。因为音乐和音符出现明显的不同步,发现了脚本生成的数据中,BPM(beats per minute)不对。然后改脚本,大概是那时候BPM解析的问题解决了。
讲座完了之后,就是传说中的 hackathon 环节了。我直接过去找杜欢,结果他说可能没空参与… 还好杜欢旁边坐着的是上上次创新工厂的 HTML5 交流会上认识的邱迪,然后我把我的想法跟他说了一下,顺便邀请另外两人一起做。项目介绍花了好长时间 =,= 后来觉得费时,我直接说分工了。4个人,我继续解决音乐和音符的同步问题,邱迪做游戏流程控制,男A做 canvas 效果,女B 做canvas 外部的页面… 我的代码直接放 github 上的,男A 用 mac,可以直接 clone git 项目,邱迪和女B 木有 git,只好用U盘…… hackathon 在紧张的气氛中开始了……
Hackathon 过程中,我做的事情基本上是 数值的调整以及代码合并。计算 frame 位置的公式是我昨晚推导出来的。直接按照公式,音符下落的速度很快。也不知道是公式的问题,还是实际fps 不准,我把生成数据脚本中的 fps 参数,从32 改到128,下落速度基本ok了;然后是调初始帧的数值,都是很细节的东西,不一一说了。后来合并代码,邱迪的开始界面写了两个,一个是 HTML,一个是用 canvas 画出来的。合了号半天才成功。女B做的东西改了canvas 的宽度,引发一系列问题,后来直接放弃了… 她住的似乎比较远,代码给我之后她提前回家了。男A的代码是做按键时的渐变效果。我看他是先自己写测试页面再来改我代码…… 靠谱。合代码也不顺利,一开始效果不理想,然后叫杜欢帮忙看,他也查文档做调整,还是实现了预期效果。代码合好了之后我才松口气吃饭去…… 对了,Google 连晚餐都提供了……
作品展示。我还是挺紧张,台下是想的东西到了台上都忘了说。3个小时,刷几道算法题还可以,做游戏的话时间太短。而且感觉是 Hackathon 的参与者大多比较小白,我也算一个吧…… 然后是作品评分,然后就有了一个二等奖。领奖时还是紧张了,CCTV都谢了都没谢Google… 奖品是一个音响,由于开发基本上是我主导,我就把奖品独吞了…… 回去的地铁上跟男A聊了下,男A同学在读研,创新工厂实习,做豌豆荚的;本科居然是学的经管,挺靠谱的一人,赞一个…
回来之后再仔细看这个活动博客:,才发现活动是 Google Chrome 技术推广部组织的。我也顺便推广下 chrome 。我笔记本 Ubuntu 11.04 上,我都把自带的 firefox 4 都删掉了。普通使用的话,firefox 没有不能被 chrome 取代的地方;firefox 的程序框架也比chrome 厚重;稳定性和易用性也是 chrome 胜出。即使是对于咱们程序员而言,研究出chromium 的安全漏洞可以拿悬赏奖金,你看firefox 代码有这好处么……
update at 5.31:
在 github 上建立了一个 project page, 可以看 sample: 可能会后续做完善。
Categories: html5


May 18, 2011 9 comments





现在性压抑得厉害,晚上都能做很奇怪的梦,早晨醒来赖床不想起。有件很神奇的事情是09年来北京之后,某次自己洗澡才发现手淫可以让自己射精,在这之前我以为用手抚摸就算手淫了。而在手淫之前我有过成功做爱的。想想那一次成功折腾好久,多么来之不易。现在可以控制自己手淫。手淫不会有做爱时拥抱抚摸的愉悦,而且我怀疑手淫会更快地让自己变老。两个月前我还用过避孕套手淫,好浪费 🙂



当时以为自己离职创业是为了理想,其实自己算计的还是钱。慢慢的发现,为了别人的理想被跟抽着鞭子跑,并不是我喜欢的生活和工作。那时候一般很晚下班,自己做开发还得盯着服务器监控,出问题了给机房打电话。之前没有运维经验,服务器死机都不知道从何入手。后来仔细想想我还是不想什么都管,我不擅长同时跟踪处理多个问题。 现在工作内容倒是没有问题了,只是自己还没找到技术上前进的目标。




update at 22 May, 2011

昨天晚上十点多去在附近逛了逛, 进去了, 体验很糟糕. 我就说一下吧. 找妓女找年轻的, 至少一般不会欺诈消费者. 这毕竟是交易。从一般的法律意义上来讲(天朝的就算了),卖淫的行为合法,而欺诈是非法的。带欺诈行为的交易, 我不会做第二次。


1. 进去一家店里问价格。还是按摩50 推油50 口活100。然后我问做爱多少钱,她说100。我问是脱裤子做吗,他说是啊,不脱怎么做。然后我说ok。她让我先给钱,行,我给了。然后上床,上去之后发现,妈的,床上里边还睡着一个baby。

2. 结果我上去之后,套上TT,只给BJ,她不上来。我问她为什么不上。她说JJ没硬起来怎么做。后来硬了她还是不上。我问为什么。她说脱裤子做另外收钱。我问多少,她说300。我认栽了,一看兜里只有260。我说身上就这么多,260行不行。她说不行,我说我去取钱吧。然后提裤子走了。

3. 我还真去取钱了。完了之后就在纠结要不要去。因为之前的过程让我对她的品行很怀疑。纠结半天还是去了。我有了戒心,说给100完事之后再给100行不行。她说不行。那我200全给她了。然后。。她横躺床上,这种姿势令我很不舒服。因为我没有这样做过。我让她平躺床上,她就像听不懂一样。我也懒得继续说,只想快点完事。这姿势弄得我很累,而且没法高潮。

4. 完了之后,她居然说BJ 和做爱分开算,我还得给她一百。这次我生气了,跟她顶了两句。她仍然不依不挠。我想跟这种人没什么好说的,直接开门走人,她居然威胁我说打电话叫人。。。我摔门走了。


Categories: AboutMe