COW 是一个利用二级代理帮助自动化翻墙的 HTTP 代理服务器。它能自动检测被墙网站,且仅对被墙网站使用二级代理。( cow此处就是二级代理)
当前版本:0.5.1
版本 0.5 更新重要说明
-
配置文件修改
- 请删除下列选项:
autoRetry
,updateDirect
,updateBlocked
- 请将
socks
选项改名为socksParent
- 以后的版本遇到这些选项将报错,目前只是给出修改提示(很抱歉对配置文件格式进行修改)
- 请删除下列选项:
-
chou
,auto-direct
,auto-blocked
文件不再需要
功能
- 支持 HTTP proxy, SOCKS5 proxy和 shadowsocks 作为父代理
- 可使用 goagent 作为一级代理(即父代理)
- 可以帮助执行 ssh 命令创建 SOCKS5 代理,断开后重连(需要公钥认证)
- 无需安装shadowsocks client,提供 HTTP 代理
- 自动检测网站是否被墙,仅对被墙网站使用二级代理
- 对未知网站,先尝试直接连接,失败后使用二级代理重试请求,2 分钟后再尝试直接
- 内置常见被墙网站,减少检测被墙所需时间,也可手工添加被墙网站
- 自动记录经常访问网站是否被墙
- 提供 PAC 文件,直连网站绕过 COW
- 内置常见可直连网站,如国内社交、视频、银行、电商等网站,也可手工添加
限制
- COW 没有提供 cache
- 被墙网站检测在糟糕的网络连接环境下不可靠
安装
二进制文件
目前为运行在 x86 处理器上的 OS X, Linux, Windows 提供二进制文件。二进制文件发布在 Google Code。(win下,http://cow-proxy.googlecode.com/files/cow-win32-0.5.1.zip,http://cow-proxy.googlecode.com/files/cow-win32-0.6.2u2.zip)OS X 和 Linux 桌面系统上,推荐使用下面的命令来下载二进制文件和样例配置(也可用来更新):
curl -s -L https://github.com/cyfdecyf/cow/raw/master/install-cow.sh | bash
该脚本在 OS X 上会帮助将 COW 设置为登录时启动。从源码安装
安装 Go,设置好GOPATH
,执行以下命令(go get -u
来更新):go get github.com/cyfdecyf/cow
使用说明
配置文件在 Unix 系统上为~/.cow/rc
,Windows 上为 COW.exe 所在目录的 rc.txt
文件。 样例配置 包含了所有选项以及详细的说明,建议下载然后修改。启动 COW:
- Unix 系统在命令行上执行
cow
- Windows 上双击
cow.exe,(先把解压目录里的sample-rc.txt复制为rc.txt,然后修改rc.txt,去掉socksParent = 127.0.0.1:1080前面的#号,去掉httpParent = 127.0.0.1:8087前面的#号,保存更改。然后
双击cow.exe,设置浏览器的http代理为
127.0.0.1:7777即可翻墙。当然cow.exe只是个二级代理工具,在启动它之前,需先启动父代理,比如goagent或shadowsocks.
http://<listen address>/pac
。命令行选项可以覆盖配置文件中的选项,执行
cow -h
来获取更多信息。(cat ~/.cow/rc
listen = http://127.0.0.1:7777
# shadowsocks:
# proxy = ss://encrypt_method:password@1.2.3.4:8388
#socks proxy:
proxy = socks5://127.0.0.1:1080
然后运行cow,即可把socks5://127.0.0.1:1080 转换为http://127.0.0.1:7777 )
手动指定被墙和直连网站
~/.cow/blocked
和 ~/.cow/direct
可指定被墙和直连网站:- 每行一个域名或者主机名(COW 会先检查主机名是否在列表中,再检查域名)
- 可以使用类似
google.com.hk
这样的域名
访问网站记录
COW 在~/.cow/stat
json 文件中记录经常访问网站被墙和直连访问的次数。- 直连访问成功一定次数后相应的 host 会包含到 PAC 文件
- 使用 PAC 可以获得更好的性能, 但若某网站变成被封网站,浏览器会依然尝试直连。遇到这种情况可以暂时总是使用 COW 代理,让 COW 学习到新的被封网站
- host 被墙一定次数后会直接用二级代理访问
- 为避免误判,会以一定概率再次尝试直连访问
- host 若一段时间没有访问会自动被删除
- 内置网站列表和用户指定的网站不会出现在统计文件中
COW 如何检测被墙网站
COW 将以下错误认为是墙在作怪:- 服务器连接被重置 (connection reset)
- 创建连接超时
- 服务器读操作超时
用连接被重置来判断被墙通常来说比较可靠,超时则不可靠。COW 每隔一分钟会尝试估算合适的超时间隔,避免在网络连接差的情况下把直连网站由于超时也当成被墙。 COW 默认配置下检测到被墙后,过两分钟再次尝试直连也是为了避免误判。
如果超时自动重试给你造成了问题,请参考样例配置高级选项中的
readTimeout
, dialTimeout
选项from https://github.com/cyfdecyf/cow
----------------------------------------------------
COW 是一个利用二级代理帮助自动化翻墙的 HTTP 代理服务器。
去年暑假开始写的,现在在自己实验室部署着,工作地比较稳定了。
工作方式很简单,对于没有访问过的网站,默认尝试直接连接,直连失败了用二级代理重试。
工作时会记录经常访问的网站直连和用二级代理访问的次数,如果被墙次数很多则以后会直接用二级代理。(为避免误判被墙,会随机的再次尝试直连。)
同时提供 PAC,直连多次都成功的网站会出现在 PAC 中,让客户端绕过代理直接访问。
支持 socks5, shadowsocks, HTTP 二级代理;支持简单的 ip 和用户名密码认证。
项目主页 https://github.com/cyfdecyf/cow
欢迎大家试用。
用 Go 写的,愿意试一下的同学可以去 Google Code 下编译好的二进制文件和配置例子 https://code.google.com/p/cow-proxy/downloads/list 当然也可以安装 Go 自己编译
配置例子里用中文写了详细的注释,根据自己的情况修改。Windows 上把配置例子和可执行文件放在同一个目录,OS X 和 Linux 把配置文件放在 ~/.cow/rc 即可。