// util package common import ( "fmt" "net" "net/http" "strings" ) // 获取操作系统类型 func GetSystem(userAgent string) string { userAgent = strings.ToLower(userAgent) if strings.Contains(userAgent, "android") { return "android" } else if strings.Contains(userAgent, "iphone") || strings.Contains(userAgent, "ipad") || strings.Contains(userAgent, "ipod") { return "ios" } else { return "pc" } } // 获取平台类型 func GetOS(useros string) string { osVersion := "其他" if strings.Contains(useros, "NT 6.0") { osVersion = "Windows Vista/Server 2008" } else if strings.Contains(useros, "NT 5.2") { osVersion = "Windows Server 2003" } else if strings.Contains(useros, "NT 5.1") { osVersion = "Windows XP" } else if strings.Contains(useros, "NT 5") { osVersion = "Windows 2000" } else if strings.Contains(useros, "Mac") { osVersion = "Mac" } else if strings.Contains(useros, "Unix") { osVersion = "UNIX" } else if strings.Contains(useros, "Linux") { osVersion = "Linux" } else if strings.Contains(useros, "SunOS") { osVersion = "SunOS" } else if strings.Contains(useros, "NT 6.3") { osVersion = "Window8" } else if strings.Contains(useros, "NT 6.1") { osVersion = "Window7" } else if strings.Contains(useros, "NT 10.0") { osVersion = "Window10" } return osVersion } // 获取浏览器类型 func GetBrowse(userbrowser string) string { browserVersion := "其他" if strings.Contains(userbrowser, "MSIE") { browserVersion = "IE" } else if strings.Contains(userbrowser, "Firefox") { browserVersion = "Firefox" } else if strings.Contains(userbrowser, "Chrome") { browserVersion = "Chrome" } else if strings.Contains(userbrowser, "Safari") { browserVersion = "Safari" } else if strings.Contains(userbrowser, "rv:11.0") { browserVersion = "IE11" } return browserVersion } // 获取ip func GetIp(req *http.Request) string { if req == nil { return "" } ip_for := req.Header.Get("x-forwarded-for") ip_client := req.Header.Get("http_client_ip") ip_addr := req.Header.Get("Remote_addr") un := "unknown" if (ip_for != un) && (len(strings.TrimSpace(ip_for)) > 0) { return ip_for } if (ip_client != un) && (len(strings.TrimSpace(ip_client)) > 0) { return ip_client } if (ip_addr != un) && (len(strings.TrimSpace(ip_addr)) > 0) { return ip_addr } ip, _, _ := net.SplitHostPort(req.RemoteAddr) return ip } // 获取当前服务器ip func GetLocationIp() (ips []string) { // 获取所有网络接口 interfaces, err := net.Interfaces() if err != nil { fmt.Println("获取网络接口错误:", err) return } // 遍历网络接口,找到非回环接口的 IPv4 地址 for _, iface := range interfaces { // 排除回环接口和无效接口 if iface.Flags&net.FlagLoopback == 0 && iface.Flags&net.FlagUp != 0 { addresses, err := iface.Addrs() if err != nil { fmt.Println("获取接口地址错误:", err) return } // 遍历接口地址,找到第一个 IPv4 地址 for _, addr := range addresses { ipNet, ok := addr.(*net.IPNet) if ok && !ipNet.IP.IsLoopback() && ipNet.IP.To4() != nil { ip := ipNet.IP ips = append(ips, fmt.Sprint(ip)) fmt.Println("当前服务器环境的 IP 地址:", ip) } } } } return }