header custom & fix dialerProxy with finalmask/udp#5657
header custom & fix dialerProxy with finalmask/udp#5657
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 解析,不确定,可以试试