mirror of
https://github.com/2930134478/AI-CS.git
synced 2026-06-15 08:45:41 +08:00
60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// GetClientIP 获取客户端 IP 地址(考虑代理情况)
|
|
func GetClientIP(c *gin.Context) string {
|
|
// 优先从 X-Forwarded-For 获取(适用于代理/负载均衡)
|
|
ip := strings.TrimSpace(c.GetHeader("X-Forwarded-For"))
|
|
if ip != "" {
|
|
return ip
|
|
}
|
|
// 从 X-Real-IP 获取
|
|
ip = strings.TrimSpace(c.GetHeader("X-Real-IP"))
|
|
if ip != "" {
|
|
return ip
|
|
}
|
|
return c.ClientIP()
|
|
}
|
|
|
|
// ParseUserAgent 从 User-Agent 字符串中解析浏览器和操作系统
|
|
func ParseUserAgent(userAgent string) (browser string, os string) {
|
|
browser = "Unknown"
|
|
os = "Unknown"
|
|
|
|
ua := strings.ToLower(userAgent)
|
|
if ua == "" {
|
|
return
|
|
}
|
|
|
|
switch {
|
|
case strings.Contains(ua, "edg/"):
|
|
browser = "Edge"
|
|
case strings.Contains(ua, "chrome/"):
|
|
browser = "Chrome"
|
|
case strings.Contains(ua, "firefox/"):
|
|
browser = "Firefox"
|
|
case strings.Contains(ua, "safari/"):
|
|
browser = "Safari"
|
|
}
|
|
|
|
switch {
|
|
case strings.Contains(ua, "windows nt"):
|
|
os = "Windows"
|
|
case strings.Contains(ua, "mac os x") || strings.Contains(ua, "macintosh"):
|
|
os = "macOS"
|
|
case strings.Contains(ua, "android"):
|
|
os = "Android"
|
|
case strings.Contains(ua, "iphone") || strings.Contains(ua, "ipad"):
|
|
os = "iOS"
|
|
case strings.Contains(ua, "linux"):
|
|
os = "Linux"
|
|
}
|
|
|
|
return
|
|
}
|