loaclip.go 933 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package utils
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. func GetLocalIP() string {
  7. localIp := "localhost"
  8. // 获取本机的网络接口信息
  9. interfaces, err := net.Interfaces()
  10. if err != nil {
  11. fmt.Println("无法获取网络接口信息:", err)
  12. return localIp
  13. }
  14. // 遍历每个网络接口,找到第一个非loopback、非IPv6的内网IP地址
  15. for _, ifAce := range interfaces {
  16. // 排除loopback接口和IPv6地址
  17. if ifAce.Flags&net.FlagLoopback == 0 && ifAce.Flags&net.FlagUp != 0 {
  18. addrs, err := ifAce.Addrs()
  19. if err != nil {
  20. fmt.Println("无法获取网络接口地址:", err)
  21. continue
  22. }
  23. for _, addr := range addrs {
  24. // 检查是否为IPv4地址
  25. ipNet, ok := addr.(*net.IPNet)
  26. if ok && !ipNet.IP.IsLoopback() && ipNet.IP.To4() != nil {
  27. // fmt.Println("本机内网IPv4地址:", ipnet.IP.String())
  28. localIp = ipNet.IP.String()
  29. return localIp
  30. }
  31. }
  32. }
  33. }
  34. return localIp
  35. }