对于我正在开发的程序,我必须检查IP (将我连接到Internet的IP )是公共的还是私有的。为此,我需要区分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?
发布于 2014-03-31 09:22:25
jimt的答案是正确的,但相当复杂。我会简单地检查一下ip.To4() != nil
。由于文档中说“如果ip不是IPv4地址,则To4返回nil”,当且仅当该地址是IPv4地址时,此条件才应返回true
。
发布于 2015-09-16 06:22:50
我将使用net包中的.To4()、.To16()来确定它是IPv4地址还是IPv6地址。检查blog post。例如,查看博客的最后一部分,它可能会对你有所帮助。
发布于 2016-12-29 02:47:44
govalidator检查字符串中是否存在:
。
func IsIPv6(str string) bool {
ip := net.ParseIP(str)
return ip != nil && strings.Contains(str, ":")
}
https://stackoverflow.com/questions/22751035
复制相似问题