func localIPAddress0()

in pkg/tools/ip.go [101:141]


func localIPAddress0() (ipAddresses map[string]*hostIPAddress, defAddr string, err error) {
	ifaces, err := net.Interfaces()
	if err != nil {
		return nil, "", err
	}
	// handle err
	ipAddresses = make(map[string]*hostIPAddress)
	var defV4, defV6 string
	for _, i := range ifaces {
		if i.Flags&net.FlagLoopback != 0 {
			continue
		}
		addrs, err := i.Addrs()
		if err != nil {
			return nil, "", err
		}
		ipv4, ipv6 := analyzeIPAddresses(addrs)

		if ipv4 != "" || ipv6 != "" {
			if defV4 == "" {
				defV4 = ipv4
			}
			if defV6 == "" {
				defV6 = ipv6
			}
			ipAddresses[i.Name] = &hostIPAddress{ipV4: ipv4, ipV6: ipv6}
		}
	}

	if len(ipAddresses) == 0 {
		return nil, "", fmt.Errorf("not found")
	}

	if defV4 != "" {
		defAddr = defV4
	} else {
		defAddr = defV6
	}

	return ipAddresses, defAddr, nil
}