SagerNet / sing-box

The universal proxy platform
https://sing-box.sagernet.org/
Other
15.38k stars 1.89k forks source link

ShadowsocksMulti 多用户UDP 解密失败 #1867

Open ipaguge opened 1 week ago

ipaguge commented 1 week ago

操作系统

macOS

系统版本

14.2.1 (23C71)

安装类型

其他

如果您使用图形客户端程序,请提供该程序版本。

https://github.com/SagerNet/sing-shadowsocks/blob/v0.2.6/shadowaead/service_multi.go

版本

https://github.com/SagerNet/sing-shadowsocks/blob/v0.2.6/shadowaead/service_multi.go

描述

多用户的情况下 配置中的第一个用户解密正常 之后的用户 shadowsocks udp 解密失败

怀疑是buffer 在上一次尝试解密后没有被重置 导致后面的密码全部解密失败###

重现方式

shadowsocks 添加多个user

连接第二个用户或者第三个用户 发起udp请求

日志

No response

支持我们

完整性要求

ipaguge commented 1 week ago

tcp请求解密无异常 只有udp时出现这个问题 我尝试在github.com/sagernet/sing/common/buf中 增加 如下方式 然后解密时每次使用Copy的新Buffer 解密正常 因此怀疑是 每次解密Buffer并没有重置导致的解密失败

func (b Buffer) Copy() Buffer { newBuffer := &Buffer{ data: make([]byte, len(b.data)), start: b.start, end: b.end, capacity: b.capacity, managed: b.managed, } copy(newBuffer.data, b.data) return newBuffer }

dyhkwong commented 1 week ago

try https://github.com/SagerNet/sing-shadowsocks/pull/6?