You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go中如何判断netip.ParsePrefix()解析的CIDR是IPv4还是IPv6?

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

你可以通过前缀对应的基础IP地址来判断类型,具体思路如下:

你遇到的问题点:

  • 使用net.ParseCIDR()时,可通过调用.To4()并检查返回值是否为nil来判断是否是IPv4格式
  • netip.Prefix类型没有提供Is4()方法,直接调用会触发错误:
    p, err := netip.ParsePrefix(cidr)
    p.Is4() // 错误!p.Is4未定义(类型netip.Prefix没有该字段或方法)
    
  • 尝试用p.Bits()判断的话,前缀长度≤32时存在歧义(比如IPv6的/32前缀和IPv4前缀无法区分)

解决方案

利用netip.Prefix的.Addr()方法获取前缀对应的基础IP地址,再通过netip.Addr的.Is4()/.Is6()方法判断IP类型,以此确定CIDR块的格式:

p, err := netip.ParsePrefix(cidr)
if err != nil {
    // 处理解析错误
}
// 判断是否为IPv4格式的CIDR
isIPv4 := p.Addr().Is4()
// 判断是否为IPv6格式的CIDR
isIPv6 := p.Addr().Is6()

这种方式通过IP本身的类型来判断,避免了前缀长度带来的歧义问题。

内容的提问来源于stack exchange,提问作者TomOnTime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:12:05