Wie erhalte ich die Client-IP in Golang?
Golangs Methode zum Abrufen der Client-IP:
Die ClientIP-Methode ähnelt der ClientPublicIP-Methode, außer dass sie die Client-IP gemäß http erhält Protokollvereinbarung. Finden Sie die öffentliche IP-Adresse gemäß dem vereinbarten Format.
In einer Umgebung mit komplexer Netzwerk- und Servicearchitektur und Geschäftslogik ist es nicht immer möglich, die echte IP gemäß der im http-Protokoll vereinbarten Methode zu erhalten. In unserem Unternehmen wird der Benutzerverkehr über drei Parteien weitergeleitet Auf mehreren Ebenen (alle (http-Client), die von den drei Parteien selbst implementiert werden, treten zwangsläufig einige Mängel auf. Zu diesem Zeitpunkt wird es für zukünftige Dienste schwieriger sein, die tatsächliche IP des Benutzers abzurufen. Sie wissen nicht einmal, ob das der Fall ist Die von Ihnen erhaltene IP ist echt.
Da der Datenverkehr unserer Kunden jedoch über drei Parteien weitergeleitet wird, sind die meisten Kunden öffentliche Netzwerkbenutzer, selbst wenn man den Test ausschließt. Durch die Kombination der ClientPublicIP- und ClientIP-Methoden kann die tatsächliche IP des Benutzers immer besser ermittelt werden
Mit der oben genannten Methode können Sie immer effektiv die tatsächliche IP-Adresse des Benutzers ermitteln. Lassen Sie uns die spezifische Implementierung der beiden Methoden analysieren.// var r *http.Request ip := exnet.ClientPublicIP(r) if ip == ""{ ip = exnet.ClientIP(r) }
// ClientIP 尽最大努力实现获取客户端 IP 的算法。 // 解析 X-Real-IP 和 X-Forwarded-For 以便于反向代理(nginx 或 haproxy)可以正常工作。 func ClientIP(r *http.Request) string { xForwardedFor := r.Header.Get("X-Forwarded-For") ip := strings.TrimSpace(strings.Split(xForwardedFor, ",")[0]) if ip != "" { return ip } ip = strings.TrimSpace(r.Header.Get("X-Real-Ip")) if ip != "" { return ip } if ip, _, err := net.SplitHostPort(strings.TrimSpace(r.RemoteAddr)); err == nil { return ip } return "" }
Gehe zum Sprachtutorial“
Das obige ist der detaillierte Inhalt vonWie bekomme ich die Client-IP in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!