requtil.go 2.9 KB

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