diff --git a/listener/sing_shadowsocks/server.go b/listener/sing_shadowsocks/server.go index 7ce1d4e9..fe934ee6 100644 --- a/listener/sing_shadowsocks/server.go +++ b/listener/sing_shadowsocks/server.go @@ -196,7 +196,7 @@ func (l *Listener) HandleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbou ctx := sing.WithAdditions(context.TODO(), additions...) err := l.service.NewConnection(ctx, conn, M.Metadata{ Protocol: "shadowsocks", - Source: M.ParseSocksaddr(conn.RemoteAddr().String()), + Source: M.SocksaddrFromNet(conn.RemoteAddr()), }) if err != nil { _ = conn.Close() diff --git a/listener/sing_vless/server.go b/listener/sing_vless/server.go index f1d5a8f9..0614e4e6 100644 --- a/listener/sing_vless/server.go +++ b/listener/sing_vless/server.go @@ -201,7 +201,7 @@ func (l *Listener) HandleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbou ctx := sing.WithAdditions(context.TODO(), additions...) err := l.service.NewConnection(ctx, conn, metadata.Metadata{ Protocol: "vless", - Source: metadata.ParseSocksaddr(conn.RemoteAddr().String()), + Source: metadata.SocksaddrFromNet(conn.RemoteAddr()), }) if err != nil { _ = conn.Close() diff --git a/listener/sing_vmess/server.go b/listener/sing_vmess/server.go index 4e887a11..dd8f32af 100644 --- a/listener/sing_vmess/server.go +++ b/listener/sing_vmess/server.go @@ -187,7 +187,7 @@ func (l *Listener) HandleConn(conn net.Conn, tunnel C.Tunnel, additions ...inbou ctx := sing.WithAdditions(context.TODO(), additions...) err := l.service.NewConnection(ctx, conn, metadata.Metadata{ Protocol: "vmess", - Source: metadata.ParseSocksaddr(conn.RemoteAddr().String()), + Source: metadata.SocksaddrFromNet(conn.RemoteAddr()), }) if err != nil { _ = conn.Close() diff --git a/transport/socks5/socks5.go b/transport/socks5/socks5.go index 61b555f4..5f699bb0 100644 --- a/transport/socks5/socks5.go +++ b/transport/socks5/socks5.go @@ -189,7 +189,7 @@ func ServerHandshake(rw net.Conn, authenticator auth.Authenticator) (addr Addr, switch command { case CmdConnect, CmdUDPAssociate: // Acquire server listened address info - localAddr := ParseAddr(rw.LocalAddr().String()) + localAddr := ParseAddrToSocksAddr(rw.LocalAddr()) if localAddr == nil { err = ErrAddressNotSupported } else { @@ -414,12 +414,15 @@ func ParseAddr(s string) Addr { func ParseAddrToSocksAddr(addr net.Addr) Addr { var hostip net.IP var port int - if udpaddr, ok := addr.(*net.UDPAddr); ok { - hostip = udpaddr.IP - port = udpaddr.Port - } else if tcpaddr, ok := addr.(*net.TCPAddr); ok { - hostip = tcpaddr.IP - port = tcpaddr.Port + switch addr := addr.(type) { + case *net.UDPAddr: + hostip = addr.IP + port = addr.Port + case *net.TCPAddr: + hostip = addr.IP + port = addr.Port + case nil: + return nil } // fallback parse