xiezuojie
10/13/2017 - 3:33 AM

获取内网IP.go

// 获取内网IP V4, 获取失败时返回""
func InternalIpV4() string {
	return internalIp(4)
}

// 获取内网IP V6, 获取失败时返回""
func InternalIpV6() string {
	return internalIp(6)
}

// 有多块网卡时,只获取第一个IP
// n 4/6 表示ipv4/ipv6
func internalIp(n int) string {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return ""
	}

	for _, addr := range addrs {
		if ipnet, ok := addr.(*net.IPNet); ok {
			if !ipnet.IP.IsLoopback() { // not '127.0.0.1'
				if n == 4 && ipnet.IP.To4() != nil {
					//println("ip:", ipnet.IP.String())
					return ipnet.IP.String()
				} else if n == 6 && ipnet.IP.To16() != nil {
					//println("ip:", ipnet.IP.String())
					return ipnet.IP.String()
				}
			}
		}
	}

	return ""
}