From c93194e6be33533ae7ef9367a94581be9fbcd0de Mon Sep 17 00:00:00 2001 From: water <672684719@qq.com> Date: Wed, 29 Jul 2026 08:45:14 +0800 Subject: [PATCH] fix: support non-standard X-Forwarded-For formats (bracketed IPv6, port suffix) --- gin.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gin.go b/gin.go index 2e033bf3..77bfac15 100644 --- a/gin.go +++ b/gin.go @@ -486,7 +486,13 @@ func (engine *Engine) validateHeader(header string) (clientIP string, valid bool items := strings.Split(header, ",") for i := len(items) - 1; i >= 0; i-- { ipStr := strings.TrimSpace(items[i]) - ip := net.ParseIP(ipStr) + // Handle formats like "[::1]:port", "1.2.3.4:port", and "[::1]" + host, _, err := net.SplitHostPort(ipStr) + if err != nil { + // No port present; strip brackets if present (e.g. "[::1]") + host = strings.Trim(ipStr, "[]") + } + ip := net.ParseIP(host) if ip == nil { break }