如何获取(IPv4)net.IPNet的广播地址?

时间:2016-03-22 22:56:10

标签: networking go

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

1 个答案:

答案 0 :(得分:2)

链接@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
}