在net包中提供了获取所有网卡的ip,一般不会用127.0.0.1,::1这样的本地回环地址,可以过滤掉,如果想要获取当前真正在使用的地址,得通过net.Dail去连一下才知道
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
欢迎关注,学习不迷路!