Переглянути джерело

Socks4a server: Check if the client sends an IP address as domain (#3628)

Fixes https://github.com/XTLS/Xray-core/issues/3622
风扇滑翔翼 1 рік тому
батько
коміт
644901d1a5
2 змінених файлів з 6 додано та 1 видалено
  1. 5 0
      common/net/address.go
  2. 1 1
      proxy/socks/protocol.go

+ 5 - 0
common/net/address.go

@@ -121,6 +121,11 @@ func IPAddress(ip []byte) Address {
 }
 
 // DomainAddress creates an Address with given domain.
+// This is an internal function that forcibly converts a string to domain.
+// It's mainly used in test files and mux.
+// Unless you have a specific reason, use net.ParseAddress instead,
+// as this function does not check whether the input is an IP address.
+// Otherwise, you will get strange results like domain: 1.1.1.1
 func DomainAddress(domain string) Address {
 	return domainAddress(domain)
 }

+ 1 - 1
proxy/socks/protocol.go

@@ -74,7 +74,7 @@ func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer)
 		if err != nil {
 			return nil, errors.New("failed to read domain for socks 4a").Base(err)
 		}
-		address = net.DomainAddress(domain)
+		address = net.ParseAddress(domain)
 	}
 
 	switch cmd {