38 lines
859 B
Go
38 lines
859 B
Go
package networking
|
|
|
|
import "net"
|
|
|
|
// LocalIP returns the non loopback local IP of the host
|
|
func LocalIP() string {
|
|
addrs, err := net.InterfaceAddrs()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
for _, address := range addrs {
|
|
// check the address type and if it is not a loopback the display it
|
|
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
|
if ipnet.IP.To4() != nil {
|
|
return ipnet.IP.String()
|
|
}
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// ResolveIp is resolve a network address from a given hostname with default resolver.
|
|
func ResolveIp(name string) (net.IP, error) {
|
|
if addrs, err := net.ResolveIPAddr("ip4", name); err != nil {
|
|
return nil, err
|
|
} else {
|
|
return addrs.IP, nil
|
|
}
|
|
}
|
|
|
|
func ExtractIp(remoteAddr net.Addr) string {
|
|
if addr, ok := remoteAddr.(*net.TCPAddr); ok {
|
|
return addr.IP.String()
|
|
} else {
|
|
return remoteAddr.String()
|
|
}
|
|
}
|