requtil.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // util
  2. package common
  3. import (
  4. "fmt"
  5. "net"
  6. "net/http"
  7. "strings"
  8. )
  9. // 获取操作系统类型
  10. func GetSystem(userAgent string) string {
  11. userAgent = strings.ToLower(userAgent)
  12. if strings.Contains(userAgent, "android") {
  13. return "android"
  14. } else if strings.Contains(userAgent, "iphone") || strings.Contains(userAgent, "ipad") || strings.Contains(userAgent, "ipod") {
  15. return "ios"
  16. } else {
  17. return "pc"
  18. }
  19. }
  20. // 获取平台类型
  21. func GetOS(useros string) string {
  22. osVersion := "其他"
  23. if strings.Contains(useros, "NT 6.0") {
  24. osVersion = "Windows Vista/Server 2008"
  25. } else if strings.Contains(useros, "NT 5.2") {
  26. osVersion = "Windows Server 2003"
  27. } else if strings.Contains(useros, "NT 5.1") {
  28. osVersion = "Windows XP"
  29. } else if strings.Contains(useros, "NT 5") {
  30. osVersion = "Windows 2000"
  31. } else if strings.Contains(useros, "Mac") {
  32. osVersion = "Mac"
  33. } else if strings.Contains(useros, "Unix") {
  34. osVersion = "UNIX"
  35. } else if strings.Contains(useros, "Linux") {
  36. osVersion = "Linux"
  37. } else if strings.Contains(useros, "SunOS") {
  38. osVersion = "SunOS"
  39. } else if strings.Contains(useros, "NT 6.3") {
  40. osVersion = "Window8"
  41. } else if strings.Contains(useros, "NT 6.1") {
  42. osVersion = "Window7"
  43. } else if strings.Contains(useros, "NT 10.0") {
  44. osVersion = "Window10"
  45. }
  46. return osVersion
  47. }
  48. // 获取浏览器类型
  49. func GetBrowse(userbrowser string) string {
  50. browserVersion := "其他"
  51. if strings.Contains(userbrowser, "MSIE") {
  52. browserVersion = "IE"
  53. } else if strings.Contains(userbrowser, "Firefox") {
  54. browserVersion = "Firefox"
  55. } else if strings.Contains(userbrowser, "Chrome") {
  56. browserVersion = "Chrome"
  57. } else if strings.Contains(userbrowser, "Safari") {
  58. browserVersion = "Safari"
  59. } else if strings.Contains(userbrowser, "rv:11.0") {
  60. browserVersion = "IE11"
  61. }
  62. return browserVersion
  63. }
  64. // 获取ip
  65. func GetIp(req *http.Request) string {
  66. if req == nil {
  67. return ""
  68. }
  69. ip_for := req.Header.Get("x-forwarded-for")
  70. ip_client := req.Header.Get("http_client_ip")
  71. ip_addr := req.Header.Get("Remote_addr")
  72. un := "unknown"
  73. if (ip_for != un) && (len(strings.TrimSpace(ip_for)) > 0) {
  74. return ip_for
  75. }
  76. if (ip_client != un) && (len(strings.TrimSpace(ip_client)) > 0) {
  77. return ip_client
  78. }
  79. if (ip_addr != un) && (len(strings.TrimSpace(ip_addr)) > 0) {
  80. return ip_addr
  81. }
  82. ip, _, _ := net.SplitHostPort(req.RemoteAddr)
  83. return ip
  84. }
  85. // 获取当前服务器ip
  86. func GetLocationIp() (ips []string) {
  87. // 获取所有网络接口
  88. interfaces, err := net.Interfaces()
  89. if err != nil {
  90. fmt.Println("获取网络接口错误:", err)
  91. return
  92. }
  93. // 遍历网络接口,找到非回环接口的 IPv4 地址
  94. for _, iface := range interfaces {
  95. // 排除回环接口和无效接口
  96. if iface.Flags&net.FlagLoopback == 0 && iface.Flags&net.FlagUp != 0 {
  97. addresses, err := iface.Addrs()
  98. if err != nil {
  99. fmt.Println("获取接口地址错误:", err)
  100. return
  101. }
  102. // 遍历接口地址,找到第一个 IPv4 地址
  103. for _, addr := range addresses {
  104. ipNet, ok := addr.(*net.IPNet)
  105. if ok && !ipNet.IP.IsLoopback() && ipNet.IP.To4() != nil {
  106. ip := ipNet.IP
  107. ips = append(ips, fmt.Sprint(ip))
  108. fmt.Println("当前服务器环境的 IP 地址:", ip)
  109. }
  110. }
  111. }
  112. }
  113. return
  114. }