Commit Graph

36 Commits

Author SHA1 Message Date
e1732a364fed
a9a746ba2f 多项对接口的修改,为ss做准备:
取消Client的LocalAddr,改为 LocalTCPAddr 和 LocalUDPAddr
删除direct中的对应条目。这样可更清晰地配置双本地地址

将设置sendthrough设置双地址的代码移动到 proxy.newClient函数

这样不仅direct可指定不同的tcp和udp的本地地址,任何client协议都可以了

为ClientCreator 接口 添加 UseUDPAsMsgConn 方法,direct和ss返回true

在ss的client的EstablishUDPChannel进行自行拨号

在ss的server建立后,自动循环监听udp,绕过vs的基本监听机制。因为vs架构的限制,一个代理只能有一个唯一的传输层协议。

ServerCreator 接口 添加 AfterCommonConfServer 方法
2022-12-03 23:51:51 +08:00
e1732a364fed
5fcaee22d1 定义dual类型的Network,用于direct,ss和socks5
这三种协议在实际传输时可能同时用到tcp和udp. 如果没给出Network值,
那么默认的Network应该为dual
2022-12-03 16:39:02 +08:00
e1732a364fed
6e39f4f2f2 完成url标准格式,见docs/url.md; 修订代码 2022-12-02 11:09:40 +08:00
e1732a364fed
2e5a33feb1 修订文档,示例,代码;解决http头层回落代码导致panic的bug;
添加 encrypt_algo 配置;

添加 configAdapter包
2022-11-30 22:40:26 +08:00
e1732a364fed
e788186d0a 实现按不同url格式进行初始化的特性
添加doc/url.md 解释文档
本commit修改了所有proxy的creator,以支持新的接口

	URLToDialConf(url *url.URL, iv *DialConf, format int) (*DialConf, error)

	URLToListenConf(url *url.URL, iv *ListenConf, format int) (*ListenConf, error)

这两者替代了原来的 NewClientFromUrl 以及 NewServerFromUrl

目前只是支持了vs标准格式;各个协议的原生格式等以后慢慢加。

未经过测试.
2022-10-27 11:43:44 +08:00
e1732a364fed
bdcda5b930 修订代码, 在socks5/http的uuid格式不正确时,不报错,而是给出一个warn, #98 2022-05-16 13:09:20 +08:00
e1732a364fed
c222b2ca8f 修订代码 2022-05-16 10:56:15 +08:00
e1732a364fed
d29ed0857f 修订文档, fix #98, http和socks5在没配置多用户时会闪退 2022-05-16 08:37:37 +08:00
e1732a364fed
1c5cb23eeb 修订文档 2022-05-15 18:59:43 +08:00
e1732a364fed
de9ea5fefa 试图令http支持多用户;修订代码
已验证socks5的多用户功能,并修订了 socks5.toml 示例

proxy的url打印时,在尾缀添加#tag
2022-05-13 23:01:18 +08:00
e1732a364fed
644a67fe74 listen新增users配置,可设置多个用户;配置格式及含义变动:
url 配置中 将 version=0 改为 v=0

listen的Version字段 含义改变。如果 listen (服务端)指定了 版本为 0,则它将只支持v0,不会支持v1. 如果你要支持v1,可以不填写 v,或者填写为1
2022-05-12 08:23:36 +08:00
e1732a364fed
72d9e97053 fix #75 : iics在 quic时输出日志会闪退;修订代码,文档; 2022-05-10 12:01:15 +08:00
e1732a364fed
7d6b743058 修订代码,示例; 支持嗅探tls中的 sni,以便分流;转发日志添加id
修复tls sniff中padding 扩展的错误,

为 iics新增 baseid 成员,并在每一个日志输出 均附带 该id,便于追踪

该id固定为6位长度。且使用了pool来缓存zap.Field, 以及一系列 iics.CanLogErr 这种方法。
2022-05-09 15:08:48 +08:00
e1732a364fed
3dce72a334 令http支持用户名密码(basic auth) 2022-05-08 18:00:05 +08:00
e1732a364fed
3fabc38c69 令socks5支持用户名密码 2022-05-08 17:43:34 +08:00
e1732a364fed
d4acfc1989 添加 socks5http 协议,与clash的mixed等价. 2022-05-08 14:01:03 +08:00
e1732a364fed
3e7e779920 修订代码; 完善ws; 令Pool使用指针,而不是slice
令 websocket在path访问正确但是不是ws连接时,也进行回落,而不是返回一个错误

将 GetH1RequestMethod_and_PATH_from_Bytes 改名为 ParseH1Request, 且支持 读取header

同时新增了 RawHeader 结构 用于 上述目的。httpLayer还添加了 CanonicalizeHeaderKey 方法。

令Pool使用指针 后,测速从 3200左右上升至3800左右,也不知道是不是这个优化导致的。如果是的话,那也太猛了。
2022-05-07 09:51:45 +08:00
e1732a364fed
e43b920b4b 修订文档,Makefile,代码
令Makefile记录每次编译所用的 tag,这样用不同tag进行编译时,make可以感知到不同.
2022-05-05 18:10:22 +08:00
e1732a364fed
5867bac0b2 修订代码,文档,Makefile,示例
修复 没给出 -c参数而给出了 -L 参数时,未能成功运行 的bug
使Makefile 支持 免参数编译 当前系统的 可执行文件。

Makefile的 BUILD_VERSION 这次 添加了 显示 build_on 系统 和 all_go_files_md5 的功能。

md5的打印只支持 linux/darwin,且因为 darwin的命令是 md5 而不是 md5sum,导致输出有差别,所以导致md5总和也有差别.
2022-05-05 14:09:12 +08:00
e1732a364fed
00c25b914f 重命名proxy的一些接口和接口方法 2022-05-05 08:28:23 +08:00
hahafool
27872e7dfc rename 2022-04-25 18:33:24 +08:00
hahafool
6ecbfe7b18 修订文档;添加http伪装头;修复一个path的bug
http头配置同时 支持ws。添加相关的示例文件.

修复 path 为 "/" 时无法连接的bug, 这是因为原代码在 requestfilter.go中, bs[5] == ' ' 这个判断没有过滤 Get / http1.1 等类似的情况

将 filter.go 重命名为 requestfilter.go ,因为现在也产生了过滤response的可能性。
2022-04-18 21:59:46 +08:00
hahahrfool
e5c38d6c8c 全面修订代码,文档 2022-04-17 11:43:19 +08:00
hahahrfool
d1f2696c1d 修订代码,示例;修复trojan的mux在传递udp时的bug; 添加内层mux的udp的测试 2022-04-15 11:35:15 +08:00
hahahrfool
ab46349c8b 修订代码,文档;实现了trojan的smux并通过了go test 2022-04-15 10:28:48 +08:00
hahahrfool
a418808b81 修订代码 2022-04-10 22:28:06 +08:00
hahahrfool
447bd8749a 重构所有udp部分的代码! 摒弃了过去非常复杂的upd转发机制;
不再使用 UDP_Putter 等机制去转发udp,而是用一个 netLayer.MsgConn 结构

proxy.Server 和 proxy.Client 接口改动,

Client在握手udp时不再使用handshake方法, 而是用新的 EstablishUDPChannel 方法

Server 在 Handshake时会选择性返回两种接口,io.ReadWriteCloser 用于tcp, netLayer.MsgConn 用于 udp

此时vless、socks5、direct 的udp转发都已经成功经过了 go test 验证, 但是 main.go 还未修改。
2022-04-08 13:49:56 +08:00
hahahrfool
b31557df14 大范围修订代码,以试图防止内存逃逸到堆; 2022-03-31 13:33:58 +08:00
hahahrfool
f8ef685bdd 解决readv内存泄漏问题;解决转发时断连后的悬垂链接问题
在四点链接的情况下,我们只终端中间两点是不够的,要切三刀;
总之实践很简单,就是copy完成之后,要Close所有的链接

readv的话,系统readv数组和buffer不要在put进pool后相互引用

添加-bl 选项,可以自定义buf大小;注意越小可能越慢,建议buf大小保持在4k以上

添加-pp选项,可以生成cpu.pprof文件

修复其它小问题.
2022-03-31 01:32:58 +08:00
hahahrfool
4ece4b84dd 修订代码 2022-03-30 21:32:35 +08:00
hahahrfool
81160e8db2 广泛修订代码, 注释 2022-03-28 22:07:18 +08:00
hahahrfool
8c6ed6377d 修订代码;将addr的赋值从各个proxy自己的方法中提出来 2022-03-23 18:54:38 +08:00
hahahrfool
5661c8737f 添加readv功能;给出测试数据;修订代码,注释;
toml 新增 app.noreadv项,命令行参数新增 -readv

默认readv是打开状态,可以选择性关闭。
2022-03-22 14:12:32 +08:00
hahahrfool
85a1407ef8 修订注释,代码
给 ProxyConn 添加 ReadFrom 函数
2022-03-19 19:09:35 +08:00
hahahrfool
1eb6dfe164 移除config包,文件直接移动到proxy中
因为config包与proxy包耦合性实际上很强,说明实际上config就是应该属于proxy包的.
2022-03-19 16:53:11 +08:00
hahahrfool
250f6e8c5b 新增http代理Server端.修订代码,注释.CommonConf加了Extra字段
CommonConf加了这一行:Extra map[string]interface{} `toml:"extra"`

这样就可以兼容一切未来未知的格式了, 同时 proxy包的 ClientCreator和 ServerCreator接口
也相应改动了,不再需要传入 map.
2022-03-19 16:43:55 +08:00