【发布时间】:2022-03-06 07:54:26
【问题描述】:
是否有内置函数来计算net.IPNet 结构的广播地址?
【问题讨论】:
-
也许
this链接可以帮助你? -
我看过那个帖子的开头,但没有一直到货物所在的结尾。谢谢!
标签: networking go
是否有内置函数来计算net.IPNet 结构的广播地址?
【问题讨论】:
this 链接可以帮助你?
标签: networking go
链接@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
}
【讨论】:
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
【讨论】: