-
Notifications
You must be signed in to change notification settings - Fork 5k
header custom & fix dialerProxy with finalmask/udp #5657
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
|
|
|
|
|
( |
已经可以了,只是无法搭配 dialerProxy, |
|
|
|
|
嗯,我也只测试了 dialerProxy 部分, |
|
看了下 Splice 对于出站只需要读方向的 raw conn,对于入站只需要写方向的 raw conn,而 header-custom 和 fragment 都满足这一要求,所以可以直接默认 tcpmask 支持解 wrap 简单测试了下 tcp header-custom 以及有无 tcpmask 的 splice 下的行为和之前一样 明天再测下 udp 的 header-custom 以及 conn 清理细节方面应该就可以了
|
1ca3c57 to
f66ed82
Compare
|
改了下,去掉 OnCloseHeaderError,增加 ServersError,可选在不同 clients 位置过来的数据不对时回应的不同错误 |
|
header-custom 的话直接照抄 noises 吧有 str 方便些,如果 rand 就只读取长度、不验证内容 顺便把 fragment 和 noises break 过来吧,
|
|
Wait 不太需要单独 noise,就放 header-custom 的 UDP 里,可以加个选项 times,1 的话就是只发一次,带 delay 的话就是单独发 |
|
header-custom 的 TCP 同理也要加 delay 这个选项,不 delay 的话要粘包发送,都先等有数据吧确保 delay 的准确性 值得注意的是 header-custom UDP 有 delay 时两端可以不同,可能就出站/入站先发几个包给 GFW 演一下, |
|
对于 UDP 就默认它可能会丢包然后有 delay 的就是不验证对端包吧,比如入站写了 client 但有 delay,只发自己 server 的就行 |
CopyRawConnIfExist 只在 freedom 出站和 xtls 里用到,freedom 里在 responseDone,获取 inbound 的 conn 用 tc.ReadFrom 如果有,ReadFrom 也只是影响这个流的写,读不会影响,所以出站只需要 unwrap 后的 read,入站只需要 unwrap 后的 write
合一起也可以,我想的是可以在整个连接周期只发一次,或者可设置重置时间,感觉已经打通的四元组再发没啥意义 |
|
Splice 的话你可能没看 ReadFrom() 里的实现,Linux 要知道两端的 fd 才能对拷,不然实际上是基于 buffer 的 copy,没用到 Splice
|
哦哦,
都改成 str 吗,我怀疑 str 能否表示完全 0-255,还有对于中文不知道用的是啥编码 |
|
tcp 流粘包不太好实现,不知道后面会接收多少才会到下一个包头 |
那肯定不是的,我是说 noises 的所有 type 照抄过来
那肯定是不能的只能可打印字符,除非,非英文编码就 UTF-8 吧 |
|
|
@LjhAUMEM 刚合并了你的 Hy2 入站,先 rebase 一下,然后等这个 PR 完工了再发新版 |
|
@LjhAUMEM 以及这个 #5681 (comment) 需要测试下 |
这个需要单独加, |
tcp/udp 的 header-custom 与修复伪装层下的 sockopt dialerProxy
tcp header-custom 配置
clients: 二维十进制字节数组,客户端将会发送的数据,与 servers 遵循一发一收
servers: 二维十进制字节数组,服务端将会发送的数据,与 clients 遵循一收一发
errors: 仅服务端,二维十进制字节数组,任一 clients 过来的数据不对时返回的数据,没有对应 clients 将不会触发
udp header-custom 配置
client: 十进制字节数组,客户端每个 udp 包头
server: 十进制字节数组,服务端每个 udp 包头
tcp/udp header-custom 目前只支持固定字节验证
tcp 的 header-custom clients 与 servers 不必数量对应
clients 如果没有要发送的将会直接接收剩下的
servers 如果没有要接收的将会直接发送剩下的
一个伪装 ssh banner 的例子,对应
SSH-2.0-OpenSSH_10.0p2 Debian-7\r\n伪装 socks5 user pass 代理 example.com
对应 hex
go 的 json 对字节数组好像原生支持 base64 解析,不确定,可以试试