Go中如何测试netip.ParsePrefix()的结果是否是IPv6?

问题描述 投票:0回答:1

如何确定

netip.ParsePrefix()
解析的CIDR块是IPv4还是IPv6格式?

  • 有了
    net.ParseCIDR()
    ,我可以打电话给
    .To4()
    并测试
    nil
  • Is4() 没有为 netip.Prefix 定义。
  • 我考虑使用 p.Bits() ,这对于 len 32 或更短的前缀来说是不明确的。
        p, err := netip.ParsePrefix(cidr)
        p.Is4() // ERROR!  p.Is4 undefined (type netip.Prefix has no field or method Is4)
go ipv6 ipv4
1个回答
0
投票

调用

p.Addr()
检索前缀的 IP 地址,然后针对该地址调用
.Is4()
.Is6()

例如:

p.Addr().Is6()

或者更长的例子:

        p, err := netip.ParsePrefix(cidr)
        fmt.Printf("p=%v ipv6=%v, err=%v\n", p, p.Addr().Is6(), err)
© www.soinside.com 2019 - 2024. All rights reserved.