Tohr (The Onion HTTP Router) 是我上个星期写的一个小的研究项目,它的名字起源于 Tor (The Onion Router)。简单地来说,它就是试图在 HTTP 层上实现类似于 Tor 实现的功能—— HTTP 层上的 HTTP(S) 隧道。
这个 idea 不是我想出来的,而是受到 GAppProxy 的启发(GAppProxy 是一个 great work)。但是 GAppProxy 只是利用 Google 的平台,而且受到 GAE 的很多限制。那么我的贡献呢,就是把这个 idea 通用化,设计一个协议使其支持多平台,解决了 GAppProxy 的一些 bug,完善了 HTTPS 的支持。(哦,忘记了,我还给它起了一个很 fancy 的名字 ^_^)目前 Tohr 的路由器可以是 Google App Engine 上的 Python 网站,也可以是普通的 Apache+PHP 站点。
Tohr 是怎么工作的?
Tohr 的工作原理见上图。首先您得拥有一个墙外的主机(免费或者收费的)作为 Tohr 路由器,Tohr目前支持 Google App Engine 和 Apache+PHP 服务器,您将对应的 tohr-router 文件上传到服务器上;然后您在本地运行一个 tohr-daemon 守护程序,设置 tohr-daemon 连接 tohr-router 的 url,tohr-daemon 默认会开启 9090 来提供一个 HTTP(S) 代理服务,您只需要将浏览器的 HTTP 代理设置为 localhost:9090,您的访问请求就会通过 tohr-daemon 转发到 Tohr 路由器上,这样就能通过它来访问被防火墙禁止访问的网站了。
Tohr 是给什么人用的?
目前来讲 Tohr 仍然不很完善,而且还需要加入对其它类型的主机,比如 asp.net、jsp 的支持,还有对多跳和匿名的支持,还没有一个针对普通用户易用性的优化。要求普通用户都有一个墙外主机也是件比较为难的事情(虽然申请一个国外免费 PHP 空间并不困难,比如这里),因此 Tohr 目前还仅适合爱折腾的人使用,尤其是懂 Python 或 PHP 的爱折腾的人,所以在这里是找不到一个一步步的图文教程教普通用户怎么配置的。当然,如果哪位用户愿意做一个,请发送到邮件列表或者提交补丁,我很乐意将它放在项目文档里。
赞,抢鲜试用一下。
顶了,改天试试看。
好东西哈。
如同,有了国外服务器就有了自由
实验成功一半,HTTP可用,但HTTPS不工作,在此处留IP为证。果然是需要小折腾一下的东西。在我的Apache上“RewriteRule ^tohr$ tohr-router.php”的似乎没有生效。有关CA证书什么的我不太懂,有空学习研究一下。
收藏至20ju.com
大大很牛,不懂的您是在墙内是怎么加密的连接呢?
@sswv
HTTPS 的问题,你安装了 OpenSSL,然后把 ca.crt 安装到你浏览器的信任CA中就可以了。IE 可以直接双击 ca.crt 安装,Linux 下的 firefox 可以直接打开 ca.crt 安装,Windows 下的 Firefox 需要自己到选项->高级->加密里面导入 ca.crt 文件。
但是强烈建议重新生成自己的 ca.key 和 ca.crt,而不是使用项目自带的 ca key pair,security reasons。Linux 下用那个 update-ca.sh 执行一下就可以了,Windows 下脚本还没有写,win 下安装 ca 要考虑的浏览器太多,烦。
先顶再看,顺便赞一个,弓虽!
没地儿下载?哪里可以下载到?
@Michael
没有 release,您可以使用 svn check out。
@appz
其实加密是完全没有必要的,只要将数据压缩一下,就是乱码了,关键字过滤就没效果了。真的想要加密,也很简单,因为这个东西就自己用,自己随便写点儿什么简单的密码算法,大概不会有人有兴趣去破解一个普通老百姓使用的密码算法的。
@Solrex
搞定了,谢谢。
wow!曾经想过搞一个这样的东西,没想到已经实现了~
Tohr router 在 http://www.000space.com 提供的免费空间上测试通过,您可以他们使用免费的 PHP 空间作为 Tohr Router 了。
暂时在国内还没有找到不错的免费PHP 空间
验证码输入几次都是错误
呵呵~
@园子
国内...就别想了,免费的PHP在国内是不可能赚钱的。
有个疑问,那个tohr.conf里地址的填法,我填的 http://xxx.xxx.com/tohr 这个是否正确啊~ 我是php的空间,连上后显示
Error response
Error code 591.
Message: Tohr-daemon: Http error, see command line log..
Error code explanation: 591 = ???.
请问是怎么回事啊
@bearqq
这取决于您的空间是否支持url rewrite和您是否正确上传.htaccess文件,所以我在配置文件中说您需要首先用浏览器测试一下url是否可以访问
@Solrex Yang
感谢您的回复,之前我在浏览器里已经试过了,显示it works,,.htaccess也上传了,不过貌似还是连接出错。反正是免费空间,也不怕提供地址:http://is.gd/2rT0D,再次感谢您的解答。
现在可以在google app engine上面用吗?
@bearqq
我正休假在家,只能用手机处理事务,等我休假结束后,会尝试调试一下您的问题.
https有点小问题,无法完全载入页面,图片无法显示。比如gmail.com。
用Google App Engine作代理服务器,https连接无法完全载入,图片无法显示。。。
比如gmail.com
从哪儿下载啊?
今天checkout了新版的代码,明天传到服务器试试
@Solrex Yang
感谢 当时用的是ubuntu9.04测试的~~gap没有试,条件不足,不过您推荐的那个网站好像也没成功,或许是我哪里做错了
这不就是跟 PhpProxy 差不多么 ……
比如这个介绍 http://www.billwsy.com/phpproxy-intro/
@forkei
哈哈,谢谢您的提醒,原来也有人做过类似工作呀 :) 我居然都不知道,又重新发明轮子了。
@Solrex
那个貌似很早就有了,不过有很多bug,使用几十分钟浏览器就会白屏,要重新启动客户端才可以继续使用。
@bearqq
经我的测试,你的服务器只支持 HTTP 抓取,不支持 HTTPS 抓取。这个大概是你的服务器提供商的限制,我想可能那个服务器不是 Linux 服务器,或者没有安装 curl,因为 tohr 的抓取 HTTPS 页面功能是使用 curl 实现的,PHP 好像没有相应模块。
@Solrex Yang
感谢您的测试,昨天我在windows下面又用svn下载了一次源代码,用python连上了,或许那个问题是linux和windows的svn不同点产生的吧~
phpproxy的加密已经被gfw解密了 现在还有glype等 其实在proxy.org还是那里 有很多不同类型的代理
可以很快的翻墙,哈哈,非常不错。可是看不了YouTube,不知道能否解决这个问题 ?
我怎么出现这样的错误呢?
D:\tohr\daemon\python>tohrd.py
Traceback (most recent call last):
File "C:\Python26\lib\logging\__init__.py", line 765, in emit
self.stream.write(fs % msg.encode("UTF-8"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 296: ordina
l not in range(128)
发现问题了,图片不能显示的原因是,每个接收的文件,在头部会加上本次会话的报文。导致文件发生变化,普通htm或文本页,反正可以显示的,但图片文件就被破坏了。
其实就是 http 隧道的一个应用吧
Loki ICMP tunneling
ACK tunneling
HTTP tunneling
呵呵 看来好好研究一下穿墙技术还是有必要的
http://webproxytunnel.sourceforge.net/
很不错
您好,我在GAE上遇到了一些问题:首先我上传到GAE上没问题,访问那个地址也显示It works了。但是运行Daemon之后,显示下列信息:
Tohr INFO: Loading configuaration from tohr.conf
Tohr INFO: Using Tohr router(s): [u'https://----.appspot.com/tohr
Tohr INFO: Using outgoing proxy:
Tohr INFO: Start serving at http://127.0.0.1:9090
但是这时候用这个代理,却显示404 not found错误。任何网站都打不开,不知是什么原因呢?
是不更新了么?检出地址错误
@hg
我可以访问呀,项目是在 SourceForge 上,最近的确没有更新,但是一直是可以访问的。您可以需要检查一下自己的网络连接是否可以访问 sourceforge.net。
博主,我用000spaces测试了下。看一般网页正常,https失败了,而且也不能看youtube,请问是空间限制还是本身项目的原因?
补充一下,我安装了openssl也导入了ca文件,但是访问https://www.google.com失败。
貌似svn地址不能用,挂代理也不行!
麻烦博主检查下!
我昨天把我的GAP1.0.0升级到了1.2.0,效果还是不错的,可以上TWITTER,但是FACEBOOK不能登录,YOUTUBE也可以看了,速度还是不错的。
我在Google App Engine上跑Tohr,客户端是windows。
跟证书也导入了,可访问Gmail,Google Doc还是不行,提示下面的错误。
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
...............................................................++++++
........++++++
e is 65537 (0x10001)
Loading 'screen' into random state - done
Using configuration from ca\ca.conf
error loading the config file 'ca\ca.conf'
9172:error:02001003:system library:fopen:No such process:.\crypto\bio\bss_file.c:169:fopen('ca\ca.conf','rb')
9172:error:2006D080:BIO routines:BIO_new_file:no such file:.\crypto\bio\bss_file.c:172:
9172:error:0E078072:configuration file routines:DEF_LOAD:no such file:.\crypto\conf\conf_def.c:197:
Tohr ERROR: [Errno 336445442] _ssl.c:361: error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib