Korrekte Art und Weise, IP-Adressen des Clients von http.Request (Golang) abzurufen
Was ist der richtige Weg, um alle Clients IP-Adressen aus http.Request
? In PHP
es gibt eine Menge von Variablendass ich prüfen soll. Ist es das gleiche auf Gehen?
Eines, das ich gefunden habe ist:
req.RemoteAddr
Ist und die Anfrage-und Kleinschreibung? zum Beispiel x-forwarded-for
ist das gleiche wie X-Forwarded-For
und X-FORWARDED-FOR
? (aus req.Header.Get("X-FORWARDED-FOR")
)
InformationsquelleAutor der Frage Kokizzu | 2014-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf http.Anfrage finden Sie die folgenden member-Variablen:
Können Sie
RemoteAddr
um dem remote-client die IP-Adresse und den port (das format "IP:port"), das ist die Adresse des ursprünglichen Anforderer oder der Letzte proxy (zum Beispiel ein load-balancer, das Leben vor dem server).Dies ist alles, was Sie für sicher.
Dann können Sie untersuchen die Header, die sind der groß-und Kleinschreibung (pro Dokumentation oben), was bedeutet, alle Ihre Beispiele funktionieren und erzielen Sie dasselbe Ergebnis:
Dies ist, weil intern
http.Header.Get
wird die Normalisierung der Schlüssel für Sie. (Wenn Sie Zugriff auf header-Karte direkt, und nicht durchGet
müssten Sie http.CanonicalHeaderKey erste.)Schließlich
"X-Forwarded-For"
ist wohl das Feld, das Sie wollen, werfen Sie einen Blick auf, um zu packen, mehr Informationen über die client-IP. Dies hängt stark von der HTTP-software auf dem remote-Seite aber als Kunde kann nichts in dort, wenn Sie möchte. Beachten Sie auch, die erwartet - format dieses Feld ist Komma+Leerzeichen getrennte Liste von IP-Adressen. Sie müssen analysieren es ein wenig, um eine einzelne IP-Wahl (wohl der erste in der Liste), zum Beispiel:produzieren:
InformationsquelleAutor der Antwort tomasz
Hier ein komplett funktionsfähiges Beispiel
InformationsquelleAutor der Antwort Stefan Steiger
Dieser hat nichts zu tun mit Gehen (oder PHP, für diese Angelegenheit). Es hängt nur davon ab, was der client, proxy, load-balancer, oder den server zu senden. Bekommen, die Sie brauchen, abhängig von Ihrer Umgebung.
http.Request.RemoteAddr
enthält die remote-IP-Adresse. Es kann oder kann nicht Ihren tatsächlichen Kunden.Nein, warum nicht versuchen, es selbst? http://play.golang.org/p/YMf_UBvDsH
InformationsquelleAutor der Antwort JimB
Dieser arbeitete für mich. Ich laufen gehen in 8081-und einen Antrag von port 8080.
Ausgabe:
Den Referrer und Herkunft haben meine client-IP.
Ausgabe:
InformationsquelleAutor der Antwort deepakssn