Unter http.Request finden Sie die folgenden Mitgliedsvariablen:
Header Header
RemoteAddr string
Sie können RemoteAddr
die IP-Adresse und den Port des Remoteclients abrufen (das Format lautet "IP: Port"). Dies ist die Adresse des ursprünglichen Anforderers oder des letzten Proxys (z. B. eines Load Balancers, der sich vor Ihrem Server befindet).
Das ist alles was Sie sicher haben.
Anschließend können Sie die Überschriften untersuchen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird (siehe obige Dokumentation). Dies bedeutet, dass alle Ihre Beispiele funktionieren und dasselbe Ergebnis liefern:
req.Header.Get("X-Forwarded-For")
req.Header.Get("x-forwarded-for")
req.Header.Get("X-FORWARDED-FOR")
Dies liegt daran, http.Header.Get
dass der Schlüssel intern für Sie normalisiert wird. (Wenn Sie direkt und nicht über die Header-Map zugreifen Get
möchten, müssen Sie zuerst http.CanonicalHeaderKey verwenden .)
Schließlich "X-Forwarded-For"
ist wahrscheinlich das Feld, das Sie sich ansehen möchten, um weitere Informationen über die IP des Clients zu erhalten. Dies hängt jedoch stark von der auf der Remote-Seite verwendeten HTTP-Software ab, da der Client auf Wunsch alles dort ablegen kann. Beachten Sie außerdem, dass das erwartete Format dieses Felds die durch Kommas und Leerzeichen getrennte Liste der IP-Adressen ist. Sie müssen es ein wenig analysieren, um eine einzelne IP Ihrer Wahl zu erhalten (wahrscheinlich die erste in der Liste), zum Beispiel:
ips := strings.Split("10.0.0.1, 10.0.0.2, 10.0.0.3", ", ")
for _, ip := range ips {
fmt.Println(ip)
}
wird herstellen:
10.0.0.1
10.0.0.2
10.0.0.3
req.Header
, müssen Sie nur tunreq.Header.Get("X-Forwarded-For")
, da die anderen Fälle vom Parser kanonisiert werden.