internal.go 616 B

123456789101112131415161718192021222324252627282930313233343536
  1. package ip
  2. import (
  3. "net"
  4. "strings"
  5. )
  6. // Internal get internal ip.
  7. func Internal() string {
  8. var (
  9. err error
  10. addrs []net.Addr
  11. inters []net.Interface
  12. )
  13. if inters, err = net.Interfaces(); err != nil {
  14. return ""
  15. }
  16. for _, inter := range inters {
  17. if !isUp(inter.Flags) {
  18. continue
  19. }
  20. if !strings.HasPrefix(inter.Name, "lo") {
  21. if addrs, err = inter.Addrs(); err != nil {
  22. continue
  23. }
  24. for _, addr := range addrs {
  25. if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
  26. if ipNet.IP.To4() != nil {
  27. return ipNet.IP.String()
  28. }
  29. }
  30. }
  31. }
  32. }
  33. return ""
  34. }