Commit Graph

43 Commits

Author SHA1 Message Date
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
dfebe3f707 修订代码;将fallback的from从string改为[]string
这样可以支持从多个listen fallback到相同的目标,又不至于使用默认回落, 更灵活.
2022-05-06 22:48:15 +08:00
e1732a364fed
516870604b 修复若干bug和问题
修复 panic捕获后没有按行打印出 的问题

修复当 toml中没有dial给出时自动退出的问题;应该自动添加一个direct并继续运行。

修复fallback中填写from时会闪退的bug, 这是一个傻bug

修复alpn无法回落的bug, 这是由于服务端没有给出完整的alpn列表导致的
2022-05-06 18:33:30 +08:00
e1732a364fed
5d31ee4cfe 修订代码拼写 2022-05-06 17:26:20 +08:00
e1732a364fed
e43b920b4b 修订文档,Makefile,代码
令Makefile记录每次编译所用的 tag,这样用不同tag进行编译时,make可以感知到不同.
2022-05-05 18:10:22 +08:00
e1732a364fed
d245c25357 修订文档 2022-05-04 13:17:24 +08:00
e1732a364fed
7a94ee3599 修订代码,文档;实现grpcSimple的header匹配的response部分 2022-05-03 15:14:09 +08:00
e1732a364fed
bab6846c40 修订代码,示例;修复ws的headers配置有些情况下匹配错误的bug
之前发现ws的header只设置了request,没设置response部分,这次都添加上了

且添加了ws的服务端 对于 额外header的验证
2022-05-03 11:14:56 +08:00
e1732a364fed
b0496618de 修正代码, 令proxy protocol的回落可用。已经通过测试. 2022-05-02 21:40:13 +08:00
e1732a364fed
2e1c08514c 修订代码,示例; 支持回落使用PROXY protocol,但未经测试 2022-05-02 20:35:55 +08:00
e1732a364fed
1eb61606ac 修复fallback的一个bug,修订示例,文档,代码
在多个fallback存在时,若同时存在按path回落 和 不按path 回落的 [[fallback]] 项,则
无法回落到 不按path回落的 回落项 上面。

这是由于任意访问实际上都有path,所以至少都会查找path是否匹配,而默认回落的type被设置成了0,即没有任何类型,然后在匹配时因为是0所以匹配不到任意一项,所以是错误的
2022-05-02 18:31:21 +08:00
e1732a364fed
b5bbda0194 修订文档, 代码; 修改回落定义
为了支持 PROXY protocol, 需要添加Xver 数据

但是之前的结构并不包含此结构,所以要添加。

同时,还加一个 from字段用于指示某个fallback限制从某个特定server发出。
2022-05-02 17:15:40 +08:00
e1732a364fed
5bf0c8f3f0 修订文档 2022-05-02 14:31:58 +08:00
e1732a364fed
efb2ee0010 修订代码,文档, 示例 2022-05-01 09:32:00 +08:00
e1732a364fed
eb10bfc773 修订代码. 令grpcSimple 可以回落到http2
老代码只是回落到http1.1

实际上只有回落到 h2才不会被审查者察觉
2022-04-30 22:16:49 +08:00
e1732a364fed
af5a06b30d 修订代码; 将ws的回落检查从main.go 转移到ws包中 2022-04-30 12:28:18 +08:00
e1732a364fed
5aeb6092bf 修订代码,文档 2022-04-29 23:08:58 +08:00
hahafool
27872e7dfc rename 2022-04-25 18:33:24 +08:00
hahafool
28279dfc31 更新文档, 代码 2022-04-21 17:05:41 +08:00
hahafool
64acfbccc3 修订代码,文档,Makefile; 适配quic到0.27;修缮ErrInErr输出 2022-04-19 08:29:46 +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
d9f3b5d0e6 修订文档,代码;减少发布包编译的数量;修复“包头”变成“握手包”的漏洞
根据vless/trojan的协议标准,首包必须要包头和payload一起发送,而之前的vs架构分开发送了,这会导致可探测。已在本commit修复。

使用 captive.apple.com 和 http://www.msftconnecttest.com/connecttest.txt 作为测试url,而不用baidu和qq。这样在非中国国家进行测试 也可以正常了。
2022-04-16 22:25:37 +08:00
hahahrfool
dc16dba65d 修订文档; 将大部分Fatal的代码改为Error. 2022-04-07 18:18:14 +08:00
hahahrfool
2b8d966909 修订代码 2022-04-03 17:10:25 +08:00
hahahrfool
e732ea3c3b 修订代码;修复loglevel为debug时失效问题;dns请求加锁,已经可用 2022-04-01 12:31:47 +08:00
hahahrfool
b31557df14 大范围修订代码,以试图防止内存逃逸到堆; 2022-03-31 13:33:58 +08:00
hahahrfool
63682dfae4 完整实现grpc;修订代码, 注释;修复udp的bug和windows中路径bug; 2022-03-25 20:34:54 +08:00
hahahrfool
4e9f865a62 修订代码 2022-03-24 23:10:37 +08:00
hahahrfool
65cc8e9cfa 进一步减轻readv的内存分配负担. 2022-03-24 22:51:28 +08:00
hahahrfool
b7509da72a 修订代码,文档,注释; 用 gonum数学包来加速fallback匹配
默认不再输出supported protocols,而是用 -sp 参数 打印输出

在utils中添加 AllSubSets_improve1, 能比 AllSubSets性能更好

添加一些 关于排列组合的测速
2022-03-24 22:11:55 +08:00
hahahrfool
74d4693894 修复两个err出现时在return前忘close连接的bug;修订示例,注释; 2022-03-24 14:19:44 +08:00
hahahrfool
146f7cf926 修复大量与websocket和回落相关的bug;
修复 websocket时无回落的问题
修复 websocket不匹配时直接返回内部错误字符串导致 可探测 的超级bug
修复回落不匹配问题
修复websocket时readv闪退问题

修复 命令行 loglevel参数被配置文件覆盖问题
修复获取tls 的 alpn和 sni时遇到空指针闪退问题

将默认fallback地址的赋值放到通用代码中;
移除 ErrSingleFallback, 改用utils.ErrFirstBuffer
使ws的server可以返回 预设的path
2022-03-24 13:42:34 +08:00
hahahrfool
363f0fac00 添加sni和alpn回落;修订代码
xray使用这种结构来匹配fallback: map[string]map[string]map[string]*Fallback

很繁琐,如果fallback匹配项目越来越多那不是就一大串了?

本作使用集合方式进行匹配,可扩展性更强
2022-03-24 09:02:38 +08:00
hahahrfool
b14c1d03c1 为godoc文档对注释进行修订 2022-03-21 09:13:10 +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
hahahrfool
9518ee65ef 修订文档、注释; minor improve 2022-03-18 21:36:17 +08:00
hahahrfool
a890d39ac7 添加toml标准配置格式支持;重构配置相关的代码;修订文档
添加了path分流部分的go test,简单修订 GetRequestPATH_from_Bytes 函数
2022-03-18 19:09:02 +08:00
hahahrfool
edcd39f3e5 添加回落path 功能;
配置格式:

在服务端配置文件,添加下面内容

 "fallbacks":[
    {
      "path":"/asf",
      "dest":6060
    }
  ]
2022-03-18 09:44:37 +08:00
hahahrfool
c9cf683a58 将common包改名为utils, 因为common太长了 2022-03-17 08:11:56 +08:00
hahahrfool
e664b9740e feat:添加回落和分流功能.
创建新子包netLayer, 将 proxy.Addr改为 netLayer.Addr
修订文档

RoutePolicy等分流机制也放到 netLayer

引入github.com/oschwald/maxminddb-golang 依赖,支持使用 GeoLite2-Country.mmdb 来进行ip分流

另外注意它默认的版本对于 golang.org/x/sys 包的依赖太老了,会导致go1.18中编译不通过,我在
go.mod 文件中新增了下面代码,就能通过编译了

```
require (
	golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86 // indirect
)
```

verysimple的可执行文件的相同目录下,必须有该mmdb文件才能够开启ip分流功能

新配置方式:配置文件新加一行 "route":{ "mycountry":"CN" }

mycountry指定的国家的ip会被直连发送,其他地址ip会被发送到代理.

新配置方式,回落,直接在 local 项的 url 的 query部分添加 fallback=:80, 或者 fallback=127.0.0.1:80
即可 回落到指定端口.

将tls_test重新挪动到tlsLayer包中

在main.go中添加了 logLevel变量,并且把关于配置文件的部分挪动到 config.go

出了上面的分流和回落以外,还新增支持了 #xxx 的尾缀,用于配置该url的tag. tag在未来会被用于精准分流

Makefile中新增了 PACK 参数用于编译出 打包版的发行包;可选 tag=embed_geoip 参数用于将mmdb.tgz文件内置到可执行程序里

同时,我开始直接使用go1.18编译本项目,期待性能提升,因为这是新发布的版本,看了介绍据说对 mac m1有20%的提升.
2022-03-16 19:28:26 +08:00
hahahrfool
405207bc56 将netLayer抽象出来,proxy.Addr现在变成netLayer.Addr
netLayer里包含关于 网络层 以及传输层 的各种定义.

这里为了添加 类似 v2simple的 common.Matcher的功能,特地抽象出来一个层.

而且增添了第一个外部依赖包,github.com/yl2chen/cidranger包.
2022-03-16 09:01:43 +08:00
hahahrfool
fa1c5db1ef 上一个commit修改了函数签名,不好,太笨,还是不改好
proxy.Server返回的 *bytes.Buffer只被用于Fallback,所以直接放到Fallback里就行
2022-03-16 08:19:09 +08:00
hahahrfool
861d5a74c5 添加fallback功能,修改了proxy.Server接口,修订文档 2022-03-16 04:16:19 +08:00