简介
在net包中提供了获取所有网卡的ip,一般不会用127.0.0.1,::1这样的本地回环地址,可以过滤掉,如果想要获取当前真正在使用的地址,得通过net.Dail去连一下才知道
获取ip地址
func main() {fmt.Println(getIpv4())fmt.Println(getIpv6())
}func getIpv4() []string {ips := make([]string, 0)for _, ip := range GetAllIp() {if ip.IP.To4() != nil {ips = append(ips, ip.IP.String())}}return ips
}func getIpv6() []string {ips := make([]string, 0)for _, ip := range GetAllIp() {if ip.IP.To16() != nil {ips = append(ips, ip.IP.String())}}return ips
}func GetAllIp() []*net.IPNet {ips := make([]*net.IPNet, 0)addrs, _ := net.InterfaceAddrs()for _, addr := range addrs {// 过滤调本地回环地址if ip, ok := addr.(*net.IPNet); ok && !ip.IP.IsLoopback() {ips = append(ips, ip)}}return ips
}
获取正在使用的地址
通过net.Dial去连一下自然就能知道自己用的是哪个地址,使用udp去连地址可以随便写,只要符合规范
func main() {fmt.Println(GetUseIp())
}func GetUseIp() string {dial, err := net.Dial("udp", "8.8.8.8:80") // Google的公共DNS服务器if err != nil {return "127.0.0.1"}addr := dial.LocalAddr().String()index := strings.LastIndex(addr, ":")return addr[:index]
}执行输出172.20.131.124
欢迎关注,学习不迷路!