| 12 | } |
| 13 | |
| 14 | func ExtractIPXFF(req *http.Request) string { |
| 15 | xffIps := req.Header["X-Forwarded-For"] |
| 16 | if len(xffIps) == 0 { |
| 17 | return "" |
| 18 | } |
| 19 | ips := strings.Split(strings.Join(xffIps, ","), ",") |
| 20 | for i := len(ips) - 1; i >= 0; i-- { |
| 21 | ips[i] = strings.TrimSpace(ips[i]) |
| 22 | ips[i] = strings.TrimPrefix(ips[i], "[") |
| 23 | ips[i] = strings.TrimSuffix(ips[i], "]") |
| 24 | if net.ParseIP(ips[i]) == nil { |
| 25 | return "" |
| 26 | } |
| 27 | } |
| 28 | return strings.TrimSpace(ips[0]) |
| 29 | } |
| 30 | |
| 31 | func ExtractIP(req *http.Request) string { |
| 32 | ip := ExtractIPXFF(req) |