package netUtil

import (
	"errors"
	"net"
)

// 需要排除的IP: 169.254.xx.xx (未分配到IP的段)
func excludeIP(ip4 net.IP) bool {
	return ip4[0] == 169 && ip4[1] == 254
}

// GetLocalIPs
//
//	@Description: 获取本机局域网IP（排除环回地址）
//	@return ips
//	@return err
func GetLocalIPs() (ips []string, err error) {
	var addrs []net.Addr
	if addrs, err = net.InterfaceAddrs(); err != nil {
		return
	}

	for _, addr := range addrs {
		if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() /*&& ipnet.IP.IsPrivate()*/ {
			if ip4 := ipnet.IP.To4(); ip4 != nil {
				if !excludeIP(ip4) {
					ips = append(ips, ipnet.IP.String())
				}
			}
		}
	}

	if len(ips) == 0 {
		// 未获取到本机局域网IP
		err = errors.New("not found")
	}

	return
}
