From 3b6a2bc56ece70098b80a408c83535e388b5c942 Mon Sep 17 00:00:00 2001 From: Toby Date: Wed, 21 Apr 2021 17:08:01 -0700 Subject: [PATCH 1/2] Use correct address for packets from localRelayConn --- pkg/socks5/server.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/socks5/server.go b/pkg/socks5/server.go index 99771a4..6b8925f 100644 --- a/pkg/socks5/server.go +++ b/pkg/socks5/server.go @@ -327,10 +327,13 @@ func (s *Server) udpServer(clientConn *net.UDPConn, localRelayConn *net.UDPConn, go func() { buf := make([]byte, udpBufferSize) for { - n, _, err := localRelayConn.ReadFrom(buf) + n, from, err := localRelayConn.ReadFrom(buf) if n > 0 { - d := socks5.NewDatagram(socks5.ATYPIPv4, - []byte{0x00, 0x00, 0x00, 0x00}, []byte{0x00, 0x00}, buf[:n]) + atyp, addr, port, err := socks5.ParseAddress(from.String()) + if err != nil { + continue + } + d := socks5.NewDatagram(atyp, addr, port, buf[:n]) _, _ = clientConn.WriteToUDP(d.Bytes(), clientAddr) } if err != nil { From 78f6eece9fac557a648d9e20e28d1b95cad46bb2 Mon Sep 17 00:00:00 2001 From: Toby Date: Wed, 21 Apr 2021 17:43:24 -0700 Subject: [PATCH 2/2] Remove unnecessary closures --- pkg/relay/relay.go | 4 ++-- pkg/socks5/server.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/relay/relay.go b/pkg/relay/relay.go index ded126c..ba168b0 100644 --- a/pkg/relay/relay.go +++ b/pkg/relay/relay.go @@ -48,7 +48,7 @@ func (r *Relay) ListenAndServe() error { if err != nil { return err } - go func(c *net.TCPConn) { + go func() { defer c.Close() r.ConnFunc(c.RemoteAddr()) rc, err := r.HyClient.DialTCP(r.Remote) @@ -59,6 +59,6 @@ func (r *Relay) ListenAndServe() error { defer rc.Close() err = utils.PipePairWithTimeout(c, rc, r.Timeout) r.ErrorFunc(c.RemoteAddr(), err) - }(c) + }() } } diff --git a/pkg/socks5/server.go b/pkg/socks5/server.go index 6b8925f..202c903 100644 --- a/pkg/socks5/server.go +++ b/pkg/socks5/server.go @@ -124,7 +124,7 @@ func (s *Server) ListenAndServe() error { if err != nil { return err } - go func(c *net.TCPConn) { + go func() { defer c.Close() if s.TCPTimeout != 0 { if err := c.SetDeadline(time.Now().Add(s.TCPTimeout)); err != nil { @@ -139,7 +139,7 @@ func (s *Server) ListenAndServe() error { return } _ = s.handle(c, r) - }(c) + }() } }