防止udp转发时被裸奔;修缮socks udp associate

修订代码,文档,示例

添加 NumErr 结构; 从 handshakeInserver_and_passToOutClient 函数 分离出一个 dialClient 函数。

在socks5包中添加 client.go 文件,以及三个udp相关的客户端请求udp函数

之前的udp associate代码被证明是有很多bug的,现在被我一一修复,并通过了 udp_test.go的测试。
This commit is contained in:
hahahrfool
2022-03-29 19:00:14 +08:00
parent 9e3265817a
commit f2adcdcd45
21 changed files with 505 additions and 137 deletions

View File

@@ -35,11 +35,11 @@ func canNetwork_tlsLazy(nw string) bool {
return false
}
// tryRawCopy 尝试能否直接对拷,对拷 直接使用 原始 TCPConn也就是裸奔转发
// tryTlsLazyRawCopy 尝试能否直接对拷,对拷 直接使用 原始 TCPConn也就是裸奔转发
// 如果在linux上则和 xtls的splice 含义相同. 在其他系统时与xtls-direct含义相同。
// 我们内部先 使用 DetectConn进行过滤分析然后再判断进化为splice 或者退化为普通拷贝
// 第一个参数仅用于 tls_lazy_secure
func tryRawCopy(useSecureMethod bool, proxy_client proxy.UserClient, proxy_server proxy.UserServer, targetAddr *netLayer.Addr, wrc, wlc io.ReadWriter, localConn net.Conn, isclient bool, theRecorder *tlsLayer.Recorder) {
func tryTlsLazyRawCopy(useSecureMethod bool, proxy_client proxy.UserClient, proxy_server proxy.UserServer, targetAddr *netLayer.Addr, wrc, wlc io.ReadWriter, localConn net.Conn, isclient bool, theRecorder *tlsLayer.Recorder) {
if utils.CanLogDebug() {
log.Println("trying tls lazy copy")
}
@@ -50,8 +50,6 @@ func tryRawCopy(useSecureMethod bool, proxy_client proxy.UserClient, proxy_serve
// 之所以可以对拷直连,是因为无论是 socks5 还是vless只是在最开始的部分 加了目标头后面的所有tcp连接都是直接传输的数据就是说一开始握手什么的是不能直接对拷的等到后期就可以了
// 而且之所以能对拷,还有个原因就是,远程服务器 与 客户端 总是源源不断地 为 我们的 原始 TCP 连接 提供数据,我们只是一个中间商而已,左手倒右手
// 如果开启了 half lazy 开关,则会在 Write的那一端 加强过滤过滤一些alert(目前还没做),然后 只在Read端 进行splice
//
// 如果是客户端,则 从 wlc 读取,写入 wrc ,这种情况是 Write, 然后对于 DetectConn 来说是 Read即 从DetectConn读取然后 写入到远程连接
// 如果是服务端,则 从 wrc 读取,写入 wlc 这种情况是 Write
//