func GetLocalIP()

in utils/netutil/netutil.go [68:104]


func GetLocalIP() (string, error) {
	ifaces, err := net.Interfaces()
	if err != nil {
		return "", fmt.Errorf("interfaces: %s", err)
	}
	ips := map[string]string{}
	for _, i := range ifaces {
		addrs, err := i.Addrs()
		if err != nil {
			return "", fmt.Errorf("addrs: %s", err)
		}
		for _, addr := range addrs {
			var ip net.IP
			switch v := addr.(type) {
			case *net.IPNet:
				ip = v.IP
			case *net.IPAddr:
				ip = v.IP
			}
			if ip == nil || ip.IsLoopback() {
				continue
			}
			ip = ip.To4()
			if ip == nil {
				continue
			}
			ips[i.Name] = ip.String()
			break
		}
	}
	for _, i := range _supportedInterfaces {
		if ip, ok := ips[i]; ok {
			return ip, nil
		}
	}
	return "", errors.New("no ip found")
}