github.com/spi-ca/misc@v1.0.1/networking/local.go (about) 1 package networking 2 3 import "net" 4 5 // LocalIP returns the non loopback local IP of the host 6 func LocalIP() string { 7 addrs, err := net.InterfaceAddrs() 8 if err != nil { 9 return "" 10 } 11 for _, address := range addrs { 12 // check the address type and if it is not a loopback the display it 13 if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { 14 if ipnet.IP.To4() != nil { 15 return ipnet.IP.String() 16 } 17 } 18 } 19 return "" 20 } 21 22 // ResolveIp is resolve a network address from a given hostname with default resolver. 23 func ResolveIp(name string) (net.IP, error) { 24 if addrs, err := net.ResolveIPAddr("ip4", name); err != nil { 25 return nil, err 26 } else { 27 return addrs.IP, nil 28 } 29 } 30 31 func ExtractIp(remoteAddr net.Addr) string { 32 if addr, ok := remoteAddr.(*net.TCPAddr); ok { 33 return addr.IP.String() 34 } else { 35 return remoteAddr.String() 36 } 37 }