diff --git a/proxy/socks/protocol/socks.go b/proxy/socks/protocol/socks.go index 8210b230..29a06d23 100644 --- a/proxy/socks/protocol/socks.go +++ b/proxy/socks/protocol/socks.go @@ -2,6 +2,7 @@ package protocol import ( "io" + "net" "github.com/v2ray/v2ray-core/common/alloc" "github.com/v2ray/v2ray-core/common/log" @@ -267,7 +268,12 @@ func (request *Socks5Request) Destination() v2net.Destination { case AddrTypeIPv6: address = v2net.IPAddress(request.IPv6[:], request.Port) case AddrTypeDomain: - address = v2net.DomainAddress(request.Domain, request.Port) + maybeIP := net.ParseIP(request.Domain) + if maybeIP != nil { + address = v2net.IPAddress(maybeIP, request.Port) + } else { + address = v2net.DomainAddress(request.Domain, request.Port) + } default: panic("Unknown address type") } diff --git a/proxy/socks/protocol/udp.go b/proxy/socks/protocol/udp.go index 82af3c4f..1730c907 100644 --- a/proxy/socks/protocol/udp.go +++ b/proxy/socks/protocol/udp.go @@ -2,6 +2,7 @@ package protocol import ( "errors" + "net" "github.com/v2ray/v2ray-core/common/alloc" "github.com/v2ray/v2ray-core/common/log" @@ -73,7 +74,12 @@ func ReadUDPRequest(packet []byte) (*Socks5UDPRequest, error) { } domain := string(packet[5 : 5+domainLength]) port := v2net.PortFromBytes(packet[5+domainLength : 5+domainLength+2]) - request.Address = v2net.DomainAddress(domain, port) + maybeIP := net.ParseIP(domain) + if maybeIP != nil { + request.Address = v2net.IPAddress(maybeIP, port) + } else { + request.Address = v2net.DomainAddress(domain, port) + } dataBegin = 5 + domainLength + 2 default: log.Warning("Unknown address type %d", addrType)