gpt4 book ai didi

golang 区分 IPv4 IPv6

转载 作者:IT老高 更新时间:2023-10-28 13:01:44 41 4
gpt4 key购买 nike

对于我正在开发的程序,我必须检查 IP(将我连接到 Internet 的 IP)是公共(public)的还是私有(private)的。为此,我需要区分 IP 是 IPv4 还是 IPv6。

我想通过IP的长度来检查:

conn, err := net.Dial("udp", "8.9.10.11:2342")
if err != nil {
fmt.Println("Error", err)
}

localaddr := conn.LocalAddr()

addr, _ := net.ResolveUDPAddr("udp", localaddr.String())

ip := addr.IP

fmt.Println(ip)
fmt.Println(len(ip))

好吧,我的 IP 是 192.168.2.100,所以是 IPv4,但是 len(ip) 告诉我长度是 16,这将是 IPv6。我的错误是什么?是否存在任何其他方法来区分始终有效的 IPv4 和 IPv6?

最佳答案

jimt 的回答是正确的,但相当复杂。我会简单地检查 ip.To4() != nil。由于文档说“如果 ip 不是 IPv4 地址,To4 返回 nil”,当且仅本地址是 IPv4 地址时,此条件才应返回 true

关于golang 区分 IPv4 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22751035/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com