Explorar o código

Add QUIC and port number dial stats

Rod Hynes %!s(int64=7) %!d(string=hai) anos
pai
achega
5a40965132
Modificáronse 4 ficheiros con 48 adicións e 9 borrados
  1. 12 0
      psiphon/notice.go
  2. 3 0
      psiphon/server/api.go
  3. 12 0
      psiphon/serverApi.go
  4. 21 9
      psiphon/tunnel.go

+ 12 - 0
psiphon/notice.go

@@ -450,6 +450,18 @@ func noticeWithDialStats(noticeType, ipAddress, region, protocol string, dialSta
 		args = append(args, "TLSProfile", dialStats.TLSProfile)
 	}
 
+	if dialStats.DialPortNumber != "" {
+		args = append(args, "DialPortNumber", dialStats.DialPortNumber)
+	}
+
+	if dialStats.QUICVersion != "" {
+		args = append(args, "QUICVersion", dialStats.QUICVersion)
+	}
+
+	if dialStats.QUICDialSNIAddress != "" {
+		args = append(args, "QUICDialSNIAddress", dialStats.QUICDialSNIAddress)
+	}
+
 	singletonNoticeLogger.outputNotice(
 		noticeType, noticeIsDiagnostic,
 		args...)

+ 3 - 0
psiphon/server/api.go

@@ -551,6 +551,9 @@ var baseRequestParams = []requestParamSpec{
 	{"server_entry_source", isServerEntrySource, requestParamOptional},
 	{"server_entry_timestamp", isISO8601Date, requestParamOptional},
 	{tactics.APPLIED_TACTICS_TAG_PARAMETER_NAME, isAnyString, requestParamOptional},
+	{"dial_port_number", isIntString, requestParamOptional},
+	{"quic_version", isAnyString, requestParamOptional},
+	{"quic_dial_sni_address", isAnyString, requestParamOptional},
 }
 
 func validateRequestParams(

+ 12 - 0
psiphon/serverApi.go

@@ -771,6 +771,18 @@ func getBaseAPIParameters(
 
 	params[tactics.APPLIED_TACTICS_TAG_PARAMETER_NAME] = config.clientParameters.Get().Tag()
 
+	if dialStats.DialPortNumber != "" {
+		params["dial_port_number"] = dialStats.DialPortNumber
+	}
+
+	if dialStats.QUICVersion != "" {
+		params["quic_version"] = dialStats.QUICVersion
+	}
+
+	if dialStats.QUICDialSNIAddress != "" {
+		params["quic_dial_sni_address"] = dialStats.QUICDialSNIAddress
+	}
+
 	return params
 }
 

+ 21 - 9
psiphon/tunnel.go

@@ -131,6 +131,9 @@ type DialStats struct {
 	UserAgent                      string
 	SelectedTLSProfile             bool
 	TLSProfile                     string
+	DialPortNumber                 string
+	QUICVersion                    string
+	QUICDialSNIAddress             string
 }
 
 // ConnectTunnel first makes a network transport connection to the
@@ -822,11 +825,11 @@ func dialSsh(
 
 	// Note: when SSHClientVersion is "", a default is supplied by the ssh package:
 	// https://godoc.org/golang.org/x/crypto/ssh#ClientConfig
-	var selectedSSHClientVersion bool
-	SSHClientVersion := ""
 	useObfuscatedSsh := false
 	var directDialAddress string
-	var quicDialSNIAddress string
+	var QUICVersion string
+	var QUICDialSNIAddress string
+	var SSHClientVersion string
 	var meekConfig *MeekConfig
 	var err error
 
@@ -838,14 +841,14 @@ func dialSsh(
 	case protocol.TUNNEL_PROTOCOL_QUIC_OBFUSCATED_SSH:
 		useObfuscatedSsh = true
 		directDialAddress = fmt.Sprintf("%s:%d", serverEntry.IpAddress, serverEntry.SshObfuscatedQUICPort)
-		quicDialSNIAddress = fmt.Sprintf("%s:%d", common.GenerateHostName(), serverEntry.SshObfuscatedQUICPort)
+		QUICVersion = selectQUICVersion(config.clientParameters)
+		QUICDialSNIAddress = fmt.Sprintf("%s:%d", common.GenerateHostName(), serverEntry.SshObfuscatedQUICPort)
 
 	case protocol.TUNNEL_PROTOCOL_MARIONETTE_OBFUSCATED_SSH:
 		useObfuscatedSsh = true
 		directDialAddress = serverEntry.IpAddress
 
 	case protocol.TUNNEL_PROTOCOL_SSH:
-		selectedSSHClientVersion = true
 		SSHClientVersion = pickSSHClientVersion()
 		directDialAddress = fmt.Sprintf("%s:%d", serverEntry.IpAddress, serverEntry.SshPort)
 
@@ -859,9 +862,18 @@ func dialSsh(
 
 	dialConfig, dialStats := initDialConfig(config, meekConfig)
 
-	// Add dial stats specific to SSH dialing
+	if meekConfig != nil {
+		_, dialStats.DialPortNumber, _ = net.SplitHostPort(meekConfig.DialAddress)
+	} else {
+		_, dialStats.DialPortNumber, _ = net.SplitHostPort(directDialAddress)
+	}
 
-	if selectedSSHClientVersion {
+	switch selectedProtocol {
+	case protocol.TUNNEL_PROTOCOL_QUIC_OBFUSCATED_SSH:
+		dialStats.QUICVersion = QUICVersion
+		dialStats.QUICDialSNIAddress = QUICDialSNIAddress
+
+	case protocol.TUNNEL_PROTOCOL_SSH:
 		dialStats.SelectedSSHClientVersion = true
 		dialStats.SSHClientVersion = SSHClientVersion
 	}
@@ -902,8 +914,8 @@ func dialSsh(
 			ctx,
 			packetConn,
 			remoteAddr,
-			quicDialSNIAddress,
-			selectQUICVersion(config.clientParameters),
+			QUICDialSNIAddress,
+			QUICVersion,
 			serverEntry.SshObfuscatedKey)
 		if err != nil {
 			return nil, common.ContextError(err)