页面

2011年3月20日星期日

使用Privoxy让Dropbox智能代理上网

关键词:dropbox, privoxy, stork, stork47, http, https, socks, 代理

本文撰于2011/03/20,背景是,中国大陆到dropbox.com的http连接会被重置,但是https连接不受影响。如果背景改变了,则本文失效。本文原始链接:http://plusium.blogspot.com/2011/03/privoxydropbox.html

本文主题:令dropbox客户端的http请求经socks代理访问dropbox服务器,而https请求不经代理直接访问。如图:

1

高手们只需看到这就行了。以下是详细操作说明。

目前在墙内,dropbox被关键字屏蔽(Wildcard: .dropbox.com),但是客户端还能正常使用,因为客户端和服务器之间使用的是https加密传输。但只有一处是没有使用https的,就是stork47.dropbox.com(在我这是这个地址,其他地方可能不一样)。这个服务器负责将服务器端(或其他客户端)发生的文件更新通知到其他客户端(我猜的,但应该差不多),然后其他客户端才会发起https请求去和服务器同步这些文件。实际中,是客户端每60秒向stork47.dropbox.com查询一次,看是否有文件需要更新。因为该请求没有使用https连接,导致连接一直被RESET,所以某台客户端的更新无法实时反映到其他客户端。

因为一般人可能没有这个需求,所以没多少人关注这个课题。像我以前也只是在家里和公司同步一些文件而已,没有实时更新的必要。有强烈需求的人,就设置让客户端全程走代理,可以解决上述问题,缺点是文件的更新速度受代理服务器速度的影响,大多数情况下没有直接连接的速度快。还有一部分人当需要更新时,直接重启客户端(甚至为此写了个脚本),因为客户端只在启动时才使用https连接检查更新,这样做的缺点显而易见。

最近用privoxy,发现它可以做到分流http和https,于是试验了一下,果然可以分流dropbox的客户端请求了。就是前面说的,让http请求走代理,而https请求不走。这样即满足了实时更新的需求,又兼顾了更新速度,可谓智能代理了。而且我搜索“dropbox privoxy”,google.com.hk前几页都没有关于这个方法的介绍,所以我这个便算原创了。至于是不是第一个,应该还有高人在,只是我没搜出来而已。因为privoxy还有不少替代方案我没有试过的,比如polipo之类。以下是操作步骤。

1,需要准备的东西:dropbox客户端(还没注册的请点我的邀请链接注册)、代理软件、privoxy。privoxy的官网是http://www.privoxy.org/,不知道下哪一个的话就点这里直接下载win32下的3.0.17稳定版http://sourceforge.net/projects/ijbswa/files/Win32/3.0.17%20(stable)/privoxy-3.0.17.zip/download。该方案应该与平台无关,但是我只在windows 7下试验过。

2,打开privoxy的配置文件config.txt,在最后面添加这几行:

#   for dropbox: http --> SOCKS Proxy(19841), https --> direct
forward-socks5 .dropbox.com 127.0.0.1:19841 .
forward .dropbox.com:443 .


注意将19841修改为你自己的代理软件的端口。如果你的代理软件不是socks类型的,那么就不是加上面的几行,而是加这几行:


#   for dropbox: http --> HTTP Proxy(19842), https --> direct
forward .dropbox.com 127.0.0.1:19842
forward .dropbox.com:443 .

注意好多地方有半角的.号,不要弄丢了。


3,启动privoxy,将dropbox的代理设置为HTTP 127.0.0.1:8118,就OK了。


如果有疑问可以留言讨论,如果有关于软件的其他用法的问题请另行google。

使用Facebook社交插件参与评论:

8 条评论:

  1. 我想补充一下, privoxy有很多内容过滤的功能应该关掉, 我的config.txt最后是这样的:
    confdir .
    logdir ./log
    logfile privoxy.log
    # listen on all interface
    listen-address :8118
    # the filtering function is not needed
    toggle 0
    accept-intercepted-requests 1
    # recommended debug level for debug
    # debug 13313
    # recommended debug level
    debug 512

    # GUI options
    log-messages 1
    log-buffer-size 1
    log-max-lines 4096
    log-highlight-messages 1
    log-font-name Consolas

    # conditional forwarding, caution the trailing dot should not be omitted
    forward-socks5 .dropbox.com localhost:50028 .
    forward .dropbox.com:443 .

    回复删除
  2. Re: JimmyZ™
    我基本上用的是默认配置,也没有不方便的地方,就懒得改了。hoho

    回复删除
  3. 但是我设置了之后dropbox提示无法建立安全链接呀,用的是goagent做代理的,求助

    回复删除
  4. 如果dropbox提示无法建立安全链接,可能是你的端口设置错误。

    forward .dropbox.com 127.0.0.1:8087
    forward .dropbox.com:443 .

    上面设置为GAE的端口8087。
    然后dropbox的代理设置为HTTP 127.0.0.1:8118。
    注意这里端口设置为8118。

    enjoy

    回复删除
  5. 请问一下,goagent做代理时,代理模式是需要设置为http还是https呢?

    回复删除
  6. Re: Unknown
    现在dropbox已经不需要设置代理就能自动更新了。见月光博客。
    另外你的goagent可能不支持https,你需要搜一搜goagent的使用说明。

    不支持https的goagent,也可以用4楼通过privoxy转发的方法。

    回复删除
  7. Re: Chun Chu
    你是指proxy.ini中的【mode = http】这个吗?
    我用的是http模式,因为goagent的https模式比较暴力,相当于中间人攻击。但是这样goagent就不支持https了,你要找一个https代理作为补充。

    goagent我好久没更新了,现在可能不太一样了。

    回复删除