首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >golang区分IPv4 IPv6

golang区分IPv4 IPv6
EN

Stack Overflow用户
提问于 2014-03-31 06:58:20
回答 4查看 28.6K关注 0票数 36

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

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

代码语言:javascript
复制
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?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-31 09:22:25

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

票数 49
EN

Stack Overflow用户

发布于 2015-09-16 06:22:50

我将使用net包中的.To4()、.To16()来确定它是IPv4地址还是IPv6地址。检查blog post。例如,查看博客的最后一部分,它可能会对你有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2016-12-29 02:47:44

govalidator检查字符串中是否存在:

代码语言:javascript
复制
func IsIPv6(str string) bool {
  ip := net.ParseIP(str)
  return ip != nil && strings.Contains(str, ":")
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22751035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档