-
Notifications
You must be signed in to change notification settings - Fork 3
/
ip.go
23 lines (19 loc) · 1.44 KB
/
ip.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package ginKit
import "github.com/gin-gonic/gin"
// GetClientIp 获取客户端IP地址(客户端的真实IP地址,但结果并不总是可靠的).
/*
在Gin框架中,ctx.ClientIP() VS ctx.RemoteIP():
(1) 当客户端直接连接到服务器时,RemoteIP 和 ClientIP 方法返回的结果相同。
(2) 当客户端通过代理服务器连接时,这两个方法返回的结果可能会不同。此时,RemoteIP 方法返回代理服务器的 IP 地址,而 ClientIP 方法则尝试从 HTTP 请求头中获取客户端的真实 IP 地址。
e.g.
ClientIP 方法首先检查 HTTP 请求头中的 X-Forwarded-For 和 X-Real-Ip 字段。如果这些字段存在,则 ClientIP 方法会返回其中的值作为客户端的真实 IP 地址。如果这些字段不存在,则 ClientIP 方法会返回与 RemoteIP 方法相同的结果。
总结:
在使用Gin框架时,如果您希望获取客户端的真实 IP 地址,应该使用 ClientIP 方法而不是 RemoteIP 方法。但是,请注意,由于客户端可以伪造 HTTP 请求头中的 X-Forwarded-For 和 X-Real-Ip 字段,因此 ClientIP 方法返回的结果并不总是可靠的。在某些情况下,您可能需要使用其他方法来验证客户端的真实 IP 地址。
*/
func GetClientIp(ctx *gin.Context) string {
return ctx.ClientIP()
}
// GetRemoteIP 获取客户端IP地址(客户端的远程IP地址).
func GetRemoteIP(ctx *gin.Context) string {
return ctx.RemoteIP()
}