cow 用Go编写的HTTP代理。COW可以自动识别被阻止的站点并使用父代代理进行访问。

140次阅读
没有评论

共计 2418 个字符,预计需要花费 7 分钟才能阅读完成。

COW(爬墙)代理

COW是一个简化穿墙的HTTP代理服务器。它能自动检测到墙网站,仅对这些网站使用二级代理。

英文README

当前版本:0.9.8 CHANGELOG cow 用Go编写的HTTP代理。COW可以自动识别被阻止的站点并使用父代代理进行访问。

欢迎在develop分支进行开发并发送拉请求:)

功能

COW的设计目标是自动化,理想情况下用户无需担心其他网站无法访问,可直连网站也不会因为使用二级代理而降低访问速度。

  • 作为HTTP代理,可提供给移动设备使用;若部署在国内服务器上,可作为APN代理
  • 支持HTTP,SOCKS5,shadowsocks和cow本身作为二级代理
    • 可使用多个二级代理,支持简单的负载均衡
  • 自动检测网站是否被墙,仅对被墙网站使用二级代理
  • 自动生成包含直连网站的PAC,访问这些网站时可绕过过COW

快速开始

安装:

  • OS X,Linux(x86,ARM):执行以下命令(也可用于更新)
      curl -L git.io/cow | bash
    
    • 环境变量COW_INSTALLDIR可以指定安装的路径,若该环境变量不是目录则询问用户
    • 所有二进制文件在OS X上编译获得,若ARM版本可能无法工作,请下载Go ARM后从二进制安装
  • Windows:发行页面下载
  • 熟悉Go的用户可用go get github.com/cyfdecyf/cow从源码安装

编辑~/.cow/rc(Linux)或rc.txt(Windows),简单的配置实例如下:

#开头的行是注释,会被忽略
# 本地 HTTP 代理地址
# 配置 HTTP 和 HTTPS 代理时请填入该地址
# 若配置代理时有对所有协议使用该代理的选项,且你不清楚此选项的含义,请勾选
# 或者在自动代理配置中填入 http://127.0.0.1:7777/pac
listen = http://127.0.0.1:7777

# SOCKS5 二级代理
proxy = socks5://127.0.0.1:1080
# HTTP 二级代理
proxy = http://127.0.0.1:8080
proxy = http://user:password@127.0.0.1:8080
# shadowsocks 二级代理
proxy = ss://aes-128-cfb:password@1.2.3.4:8388
# cow 二级代理
proxy = cow://aes-128-cfb:password@1.2.3.4:8388

使用cow协议的二级代理需要在国外服务器上安装COW,并使用如下配置:

listen = cow://aes-128-cfb:password@0.0.0.0:8388

完成配置后启动COW并配置好代理即可使用。

详细使用说明

配置文件在Unix系统上为~/.cow/rc,Windows上为COW所在目录的rc.txt文件。样例配置包含了所有选项以及详细的说明,建议下载然后修改。

启动COW:

  • Unix系统在命令行上执行cow &(如果COW在该PATH目录下,请执行./cow &
    • Linux启动脚本,如何使用请参考注释(Debian测试通过,其他Linux发行版应该也可使用)
  • 视窗
    • 双击cow-taskbar.exe,隐藏到托盘执行
    • 双击cow-hide.exe,隐藏为后台程序执行
    • 以上所有都会启动 cow.exe

PAC url为http://<listen address>/pac,也可将浏览器的HTTP / HTTPS代理设置为listen address使所有网站都通过COW访问。

使用PAC可以提供更好的性能,但如果PAC中某网站从直连变成被封,浏览器会依然尝试直连。遇到这种情况可以暂时不使用PAC而总是走HTTP代理,让COW学习到新的被封网站。

命令行选项可以覆盖部分配置文件中的选项,打开debug / request / reply日志,执行cow -h来获取更多信息。

手动指定被墙和直连网站

一般情况下无需手动指定被墙和直连网站,该功能只是是为了处理特殊情况和性能优化。

配置文件所在目录下的blockeddirect可指定被墙和直连网站(direct中的主机会添加到PAC)。Windows下文件称为blocked.txtdirect.txt

  • 每行一个域名或主机名(COW会先检查主机名是否在列表中,再检查域名)
    • 二级域名如google.com相当于*.google.com
    • com.hkedu.cn等二级域名下的三级域名,作为二级域名处理。如google.com.hk相当于*.google.com.hk
    • 其他三级及以上域名/主机名做精确匹配,例如 plus.google.com

技术细节

访问网站记录

COW在配置文件所在目录下的statjson文件中记录经常访问网站被墙和直连访问的次数。

  • 对未知网站,先尝试直接连接,失败后使用二级代理重试请求,2分钟后再尝试直接
  • 直连访问成功一定一定次数后相应的主机会添加到PAC
  • 主机被墙一定次数后会直接用二级代理访问
    • 为避免误判,会以一定概率再次尝试直连访问
  • 主机若有没有访问会自动被删除(避免stat文件无限增长)
  • 内置网站列表和用户指定的网站不会出现在统计文件中

COW如何检测被墙网站

COW将以下错误认为是墙在作怪:

  • 服务器连接被重置(连接重置)
  • 创建连接超时
  • 服务器读操作超时

(如果已经有内容发送回客户端则不会重试或直接替换连接。)不论是普通的HTTP GET等请求还是CONNECT请求,失败后COW都会自动重试请求。

COW每隔半分钟会尝试尝试适当的超时间隔,避免在网络连接差的情况下把直连网站通过超时也当成被墙。COW默认配置下检测到被墙后,过两分钟再次尝试直连也是为了避免误判。

如果超时自动重试给你造成了问题,请参考样例配置高级选项中的readTimeoutdialTimeout选项。

限制条件

  • 不提供缓存
  • 不支持HTTP管道(Chrome,Firefox默认都没开启管道,支持这个功能容易增加问题而好处并不明显)
正文完
 
admin
版权声明:本站原创文章,由 admin 2019-12-25发表,共计2418字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码