ip.go 552 B

12345678910111213141516171819202122232425262728
  1. package net
  2. import (
  3. "net"
  4. "net/http"
  5. "strings"
  6. )
  7. func ClientIP(request *http.Request) string {
  8. clientIP := request.Header.Get("X-Forward-For")
  9. clientIP = strings.TrimSpace(strings.Split(clientIP, ",")[0])
  10. if clientIP == "" {
  11. clientIP = strings.TrimSpace(request.Header.Get("X-Real-Ip"))
  12. }
  13. if clientIP != "" {
  14. return clientIP
  15. }
  16. if addr := request.Header.Get("X-Appengine-Remote-Addr"); addr != "" {
  17. return addr
  18. }
  19. if ip, _, err := net.SplitHostPort(strings.TrimSpace(request.RemoteAddr)); err == nil {
  20. return ip
  21. }
  22. return ""
  23. }