27 lines
498 B
Go
27 lines
498 B
Go
package middleware
|
|
|
|
import "net/http"
|
|
|
|
// GetClientIP 获取客户端真实 IP
|
|
func GetClientIP(r *http.Request) string {
|
|
xff := r.Header.Get("X-Forwarded-For")
|
|
if xff != "" {
|
|
for i := 0; i < len(xff); i++ {
|
|
if xff[i] == ',' {
|
|
return xff[:i]
|
|
}
|
|
}
|
|
return xff
|
|
}
|
|
if xri := r.Header.Get("X-Real-IP"); xri != "" {
|
|
return xri
|
|
}
|
|
remoteAddr := r.RemoteAddr
|
|
for i := len(remoteAddr) - 1; i >= 0; i-- {
|
|
if remoteAddr[i] == ':' {
|
|
return remoteAddr[:i]
|
|
}
|
|
}
|
|
return remoteAddr
|
|
}
|