Avege WIP
Avege最早的目标是成为一个redsocks的另一个实现,用Go做方便地跨平台,同时相比redsocks原版要多增加shadowsocks协议的支持。可是后来却只实现了shadowsocks协议,就只顾着做其他功能去了。
曾经也想过把socks/http协议作为后端支持做了,但是当时粗略地看了一下代码,觉得当前的代码结构并不好加新协议的支持,同时自己对这些协议的支持需求并不强烈,于是便放下了。
前几天Qt 5.7.1出来了,于是便要升级。Qt官方的CDN实在太渣,在大陆直连根本没速度,那些镜像站又没一个能正常工作的,于是只好走代理。本来代理线路速度是很快的,但居然被QoS限制了,遇到几百MB的大package要下载时,每次下载了几十MB百来MB时必然会断掉,而且Qt的升级程序居然没有断点续传,那个package得重新下载,屡试不爽!后来想着试试shadowsockr的混淆吧,我用的是libev版,居然非常顺利地跑满了电信百兆宽带!于是我就想Avege需要这个混淆功能!
混淆功能并没有多少文档可以参考,只能对照着libev版的C代码翻译成Go代码,虽然python版和C#版也有实现,但是相对来说我更熟悉C一点,不过我仍然看着一头雾水,一串串的字符串和魔鬼数字,就是一串串的密码啊!搞了整整一天,也只把tls1.2_ticket_auth这个混淆插件的实现翻译了一下,还没联调测试。
然后我就想着先拿libev版的用着,或许Avege可以把后端换成socks5连起来用。得益于Go利用代码的便利性,在github上找到一个proxyclient包,正好满足我的需求。又仔细看了一遍Avege的代码,这次发现要新加其他协议作为后端居然不需要修改多少代码!只要让读取配置文件部分能识别新的配置项,在连接后端时调用新的方法,就能正常工作了!
测试了一下,socks5的话速度并没有多少损失,http的话速度会降到200-300KBps左右,暂时可以满足了!
算是给Avege填了一个坑啊。下一步就是坑混淆的坑了。