Browse Source

Output debug info when parsing VMess request

v2ray 9 years ago
parent
commit
7c64093a7a
1 changed files with 14 additions and 6 deletions
  1. 14 6
      proxy/vmess/protocol/vmess.go

+ 14 - 6
proxy/vmess/protocol/vmess.go

@@ -72,6 +72,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 
 	nBytes, err := v2net.ReadAllBytes(reader, buffer.Value[:vmess.IDBytesLen])
 	if err != nil {
+		log.Debug("VMess: Failed to read request ID (%d bytes): %v", nBytes, err)
 		return nil, err
 	}
 
@@ -82,6 +83,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 
 	aesStream, err := v2crypto.NewAesDecryptionStream(userObj.ID().CmdKey(), user.Int64Hash(timeSec))
 	if err != nil {
+		log.Debug("VMess: Failed to create AES stream: %v", err)
 		return nil, err
 	}
 
@@ -89,6 +91,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 
 	nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[:41])
 	if err != nil {
+		log.Debug("VMess: Failed to read request header (%d bytes): %v", nBytes, err)
 		return nil, err
 	}
 	bufferLen := nBytes
@@ -99,7 +102,7 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 	}
 
 	if request.Version != Version {
-		log.Warning("Invalid protocol version %d", request.Version)
+		log.Warning("VMess: Invalid protocol version %d", request.Version)
 		return nil, proxy.InvalidProtocolVersion
 	}
 
@@ -112,30 +115,34 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 
 	switch buffer.Value[40] {
 	case addrTypeIPv4:
-		_, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:45]) // 4 bytes
+		nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:45]) // 4 bytes
 		bufferLen += 4
 		if err != nil {
+			log.Debug("VMess: Failed to read target IPv4 (%d bytes): %v", nBytes, err)
 			return nil, err
 		}
 		request.Address = v2net.IPAddress(buffer.Value[41:45])
 	case addrTypeIPv6:
-		_, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:57]) // 16 bytes
+		nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:57]) // 16 bytes
 		bufferLen += 16
 		if err != nil {
+			log.Debug("VMess: Failed to read target IPv6 (%d bytes): %v", nBytes, err)
 			return nil, err
 		}
 		request.Address = v2net.IPAddress(buffer.Value[41:57])
 	case addrTypeDomain:
-		_, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:42])
+		nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[41:42])
 		if err != nil {
+			log.Debug("VMess: Failed to read target domain (%d bytes): %v", nBytes, err)
 			return nil, err
 		}
 		domainLength := int(buffer.Value[41])
 		if domainLength == 0 {
 			return nil, transport.CorruptedPacket
 		}
-		_, err = v2net.ReadAllBytes(decryptor, buffer.Value[42:42+domainLength])
+		nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[42:42+domainLength])
 		if err != nil {
+			log.Debug("VMess: Failed to read target domain (%d bytes): %v", nBytes, err)
 			return nil, err
 		}
 		bufferLen += 1 + domainLength
@@ -143,8 +150,9 @@ func (this *VMessRequestReader) Read(reader io.Reader) (*VMessRequest, error) {
 		request.Address = v2net.DomainAddress(string(domainBytes))
 	}
 
-	_, err = v2net.ReadAllBytes(decryptor, buffer.Value[bufferLen:bufferLen+4])
+	nBytes, err = v2net.ReadAllBytes(decryptor, buffer.Value[bufferLen:bufferLen+4])
 	if err != nil {
+		log.Debug("VMess: Failed to read checksum (%d bytes): %v", nBytes, err)
 		return nil, err
 	}