// 获取内网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 ""
}