Random Tech Thoughts

The title above is not random

COW 0.5

放寒假之后花一周多的时间改进 COW,修复了些 bug,增加了一些新功能。改动比较大,所以跳过 0.4 版直接发布 0.5。使用说明和配置样例的注释都改成了中文,配置文件选项有些变化,请参考 github 上的说明修改;二进制文件下载还是在 Google Code。(发布之后才想起来 Google Code 貌似也被墙,使用安装脚本的话需要配置代理环境变量。)

感谢 glacjay 的建议,让我把 COW 做的更加自动化一些。0.5 版本最大的变化也在此。

由于没法准确判断超时是由于被墙还是连接状况差导致,被墙网站的判断没法做到非常准确。COW 现在的做法是:

  • 统计访问的 host 被墙和直连访问的次数,两者的差超过一定次数后才判断为被墙或者直连
    • 只有判断为直连后才会加入到 PAC 中
    • 如果原先的直连网站哪天被墙,不使用 PAC 再用 COW 访问一遍即可
  • 对不确定是否被墙的网站总是尝试直连,失败后两分钟内总是用二级代理,过后再尝试直连
  • 如果某个网站直连访问失败过,会把判断被墙的连接和读取的超时时间减半,避免等待太久
  • 内置一些直连和被墙网站列表

我自己用下来这个实现的效果还不错。原先的 updateBlocked, updateDirect, autoRetry 这些需要人工干预的选项都去掉了,名字很囧的 chou 文件也不需要了。

其他改动:

  • 支持 HTTP 二级代理(今天刚加的功能,仅用 goagent 测试过)
  • 用户可以自己指定超时时长,COW 也会自动估算
  • 支持使用 host 指定被墙和直连网站
  • 改进了 Windows 支持(仅仅在 XP 上测试,Win 7 不知道是否能正常工作)
  • 支持监听多个地址
  • 支持 IP 地址和用户名密码认证

之前想过的解决 DNS 污染的功能还是不打算做了,像 twitter 即使拿到了正确的 IP 其实还是不能访问,加入这个功能或许意义不大。使用 Go 的 ssh 实现来内建 ssh 代理支持的功能暂时也不做了,一来不清楚这个实现的稳定性,二来我觉得 shadowsocks 比 ssh 代理更加好用,而且除了 windows 平台以外加入这个功能的好处不大。

欢迎更新使用,发现 bug 麻烦在 github 上给我发 issue report。

Comments