【问题标题】:How to Get Broadcast Address of (IPv4) net.IPNet?如何获取(IPv4)net.IPNet的广播地址?
【发布时间】:2022-03-06 07:54:26
【问题描述】:

是否有内置函数来计算net.IPNet 结构的广播地址?

【问题讨论】:

  • 也许 this 链接可以帮助你?
  • 我看过那个帖子的开头,但没有一直到货物所在的结尾。谢谢!

标签: networking go


【解决方案1】:

链接@Dsafds 有答案。这里是为了历史的缘故,因此您不必自己通读该线程。代码是 Mikio Hara 的,我稍作修改。

func lastAddr(n *net.IPNet) (net.IP, error) { // works when the n is a prefix, otherwise...
    if n.IP.To4() == nil {
        return net.IP{}, errors.New("does not support IPv6 addresses.")
    }
    ip := make(net.IP, len(n.IP.To4()))
    binary.BigEndian.PutUint32(ip, binary.BigEndian.Uint32(n.IP.To4())|^binary.BigEndian.Uint32(net.IP(n.Mask).To4()))
    return ip, nil
}

【讨论】:

    【解决方案2】:

    IPAddress Go library 库提供了这样的功能。免责声明:我是项目经理。

    // from a net.IPNet
    _, ipNet, _ := net.ParseCIDR("1.2.3.4/16")
    addr, _ := ipaddr.NewIPAddressFromNetIPNet(*ipNet)
    bcast, _ := addr.ToIPv4().ToBroadcastAddress()
    
    // or from a string directly
    addr = ipaddr.NewIPAddressString("1.2.3.4/16").GetAddress()
    bcast, _ = addr.ToIPv4().ToBroadcastAddress()
    fmt.Println("broadcast address is", bcast)
    

    输出:

    broadcast address is 1.2.255.255/16
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2012-10-06
      • 2021-12-09
      • 2012-06-16
      • 2011-01-30
      • 2010-11-06
      相关资源
      最近更新 更多