From bbd6e41228981c4be37cb808d026e140683d62cd Mon Sep 17 00:00:00 2001 From: Fangliding Date: Tue, 26 May 2026 16:03:17 +0800 Subject: [PATCH] predefine --- proxy/socks/protocol.go | 5 +++-- proxy/socks/temp_udp_listen.go | 14 ++++---------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/proxy/socks/protocol.go b/proxy/socks/protocol.go index 9c388499..2a0f1d18 100644 --- a/proxy/socks/protocol.go +++ b/proxy/socks/protocol.go @@ -208,11 +208,12 @@ func (s *ServerSession) handshake5(nMethod byte, reader io.Reader, writer net.Co return nil, nil, errors.New("failed to create UDP listener").Base(err) } responsePort = net.Port(udpHub.LocalAddr().(*net.UDPAddr).Port) - tempUDPConn = NewTempUDPConn(udpHub, writer) + expectedRemoteIP, _, _ := net.SplitHostPort(writer.RemoteAddr().String()) + tempUDPConn = NewTempUDPConn(udpHub, writer, expectedRemoteIP) if !(request.Address.IP().IsUnspecified() && request.Port == 0) { // only specified an IP without port if request.Port == 0 { - tempUDPConn.predefinedRemoteIP = request.Address.String() + tempUDPConn.ExpectedRemoteIP = request.Address.String() } else { // specified both IP and port var udpRemote gonet.Addr = &gonet.UDPAddr{ IP: request.Address.IP(), diff --git a/proxy/socks/temp_udp_listen.go b/proxy/socks/temp_udp_listen.go index ef62a76e..cc5a7532 100644 --- a/proxy/socks/temp_udp_listen.go +++ b/proxy/socks/temp_udp_listen.go @@ -10,10 +10,11 @@ import ( "github.com/xtls/xray-core/common/signal" ) -func NewTempUDPConn(udpConn net.PacketConn, tcpConn net.Conn) *TempUDPConn { +func NewTempUDPConn(udpConn net.PacketConn, tcpConn net.Conn, remoteIP string) *TempUDPConn { return &TempUDPConn{ PacketConn: udpConn, AssociateTCPConn: tcpConn, + ExpectedRemoteIP: remoteIP, } } @@ -22,8 +23,7 @@ func NewTempUDPConn(udpConn net.PacketConn, tcpConn net.Conn) *TempUDPConn { type TempUDPConn struct { net.PacketConn AssociateTCPConn net.Conn - - predefinedRemoteIP string + ExpectedRemoteIP string timer *signal.ActivityTimer remote atomic.Pointer[net.Addr] @@ -37,14 +37,8 @@ func (c *TempUDPConn) Read(b []byte) (n int, err error) { return n, err } if c.remote.Load() == nil { - var expectedRemote string - if c.predefinedRemoteIP != "" { - expectedRemote = c.predefinedRemoteIP - } else { - expectedRemote, _, _ = net.SplitHostPort(c.AssociateTCPConn.RemoteAddr().String()) - } udpRemote, _, _ := net.SplitHostPort(remote.String()) - if expectedRemote != udpRemote { + if c.ExpectedRemoteIP != udpRemote { continue } else { c.remote.CompareAndSwap(nil, &remote)