123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // 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
- }
|