cyfdecyf / cow

HTTP proxy written in Go. COW can automatically identify blocked sites and use parent proxies to access.
BSD 2-Clause "Simplified" License
8.45k stars 1.62k forks source link

给大大一个建议 #28

Closed qiuzi closed 11 years ago

qiuzi commented 11 years ago

希望能变成C语言源码,移植性更强 支持透明代理 iptables类的转发支持

规则上能否支持正规表达式?类似于squid 白名单黑名单功能? 可以用来过滤广告什么的 最重要的就是移植openwrt系统下

cyfdecyf commented 11 years ago

不会考虑用 C,同时支持多个 OS 比用 Go 困难很多,发布二进制文件也更麻烦。openwrt 等 Go 支持 mips 以后应该就只是编译一下的事情。

用 iptables 把 80 端口流量转发到 COW 这个方式,COW 里只需要修改一下 request 解析的代码即可,但 443 端口 https 请求我觉得不是那么简单。我总觉得翻墙这事不要折腾得太复杂,配置个系统级别的 HTTP 代理简单可靠。

不打算支持正则表达。过滤广告还是用浏览器插件吧,adblocks 主流浏览器都支持。

时间精力有限,目前 HTTP 代理这块还有需要完善的地方,以后也不打算给 COW 添加非核心的功能。保持功能简单我才能一直维护下去。

qiuzi commented 11 years ago

若是不用正式表达式与多平台通用性,为何不在squid上做修改不更为简单强大?

cyfdecyf commented 11 years ago

关于为什么不需要正则表达式更多请参考我在 issue 29 中的回复

使用 Go 的一个好处就是跨平台,我现在能在一台 Mac 上同时编译出 x86 上 OS X, Linux, FreeBSD, Windows 32/64 bit 的二进制文件。Go 对更多平台的支持应该只是时间的问题;不使用 Python 之类的语言是考虑到性能。

squid 的配置并不方便,功能强大但不易用不是我想要的。最初是想过修改简单易用的 polipo,但要实现这样的功能需要很多修改,还不如从头写。

而且修改一个开源项目后如果不能合并到原项目中,需要自己不停的跟原项目代码保持同步,这是很麻烦的事。COW 的功能比较特殊,原项目作者很可能不愿意合并。

qiuzi commented 11 years ago

觉得靠pc端软件实现穿越很不理想,规则更新pc配置,负载均衡都不能很好发挥出来。加入到openwrt里会更加灵活易用,go语言后期不会被openwrt支持

qiuzi commented 11 years ago

说到跨平台,一个路由不更能跨平台吗?加上天朝没有软件业从中收获不到任何回报,结合硬件很能让他人认可

cyfdecyf commented 11 years ago

gcc 4.7 已经支持 go,弄个 openwrt 的 gcc 4.7 交叉编译器即可。我自己不使用 openwrt 等路由器固件,没法提供这方面的支持,你可以自己试试看。

qiuzi commented 11 years ago

gcc 4.7 是不是需要ubuntu安装? 还是要修改openwrt的toolchain?

在 2013年3月8日下午7:23,Chen Yufei notifications@github.com写道:

gcc 4.7 已经支持 go,弄个 openwrt 的 gcc 4.7 交叉编译器即可。我自己不使用 openwrt 等路由器固件,没法提供这方面的支持,你可以自己试试看。

— Reply to this email directly or view it on GitHubhttps://github.com/cyfdecyf/cow/issues/28#issuecomment-14614852 .

qiuzi commented 11 years ago

makefile 文件都没有 对交叉编译一点不了解的说

cyfdecyf commented 11 years ago

openwrt 官网有说明。openwrt 也是用 buildroot 构建,如果它自带的编译器是 gcc 4.7 的话就好办很多了,不然要替换 buildroot 中使用的 gcc。

gccgo 有一个问题是每个 goroutine 需要创建一个线程,资源消耗比较大,用在普通的小路由器上可能不太合适。(不知道 x86 上现在有没有改,Ian Lance Taylor 已经给 x86 gcc 加入了 SplitStack 支持,不过 mips 应该还没有。)

qiuzi commented 11 years ago

对哦,路由性能有限,go过于庞大看来不适合路由级别,不过运行squid关闭缓存还是正常的

在 13-3-9,Chen Yufeinotifications@github.com 写道:

openwrt 官网有说明。openwrt 也是用 buildroot 构建,如果它自带的编译器是 gcc 4.7 的话就好办很多了,不然要替换 buildroot 中使用的 gcc。

gccgo 有一个问题是每个 goroutine 需要创建一个线程,资源消耗比较大,用在普通的小路由器上可能不太合适。(不知道 x86 上现在有没有改,Ian Lance Taylor 已经给 x86 gcc 加入了 SplitStack 支持,不过 mips 应该还没有。)


Reply to this email directly or view it on GitHub: https://github.com/cyfdecyf/cow/issues/28#issuecomment-14663496

qiuzi commented 11 years ago

桌面应用不是未来网络发展趋势

在 13-3-10,ql ligxfclql@gmail.com 写道:

对哦,路由性能有限,go过于庞大看来不适合路由级别,不过运行squid关闭缓存还是正常的

在 13-3-9,Chen Yufeinotifications@github.com 写道:

openwrt 官网有说明。openwrt 也是用 buildroot 构建,如果它自带的编译器是 gcc 4.7 的话就好办很多了,不然要替换 buildroot 中使用的 gcc。

gccgo 有一个问题是每个 goroutine 需要创建一个线程,资源消耗比较大,用在普通的小路由器上可能不太合适。(不知道 x86 上现在有没有改,Ian Lance Taylor 已经给 x86 gcc 加入了 SplitStack 支持,不过 mips 应该还没有。)


Reply to this email directly or view it on GitHub: https://github.com/cyfdecyf/cow/issues/28#issuecomment-14663496

cyfdecyf commented 11 years ago

资源开销跟语言实现以及程序有关,跟语言本身无关。C++ 是最好的例子。