| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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
- }
|