github.com/lingyao2333/mo-zero@v1.4.1/core/netx/ip.go (about) 1 package netx 2 3 import "net" 4 5 // InternalIp returns an internal ip. 6 func InternalIp() string { 7 infs, err := net.Interfaces() 8 if err != nil { 9 return "" 10 } 11 12 for _, inf := range infs { 13 if isEthDown(inf.Flags) || isLoopback(inf.Flags) { 14 continue 15 } 16 17 addrs, err := inf.Addrs() 18 if err != nil { 19 continue 20 } 21 22 for _, addr := range addrs { 23 if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { 24 if ipnet.IP.To4() != nil { 25 return ipnet.IP.String() 26 } 27 } 28 } 29 } 30 31 return "" 32 } 33 34 func isEthDown(f net.Flags) bool { 35 return f&net.FlagUp != net.FlagUp 36 } 37 38 func isLoopback(f net.Flags) bool { 39 return f&net.FlagLoopback == net.FlagLoopback 40 }