在golang中,如何将www.example.com转换为www.example.com掩码可以被认为是相同的。10.222.1.2/16 to 10.223.1.2/16? Masks can be considered the same.
例如:
func Netmap(ip string, dest string) string{}
Netmap("10.222.1.2/16", "10.223.0.0/16") // => "10.223.1.2/16"
Netmap("10.222.1.5/16", "10.224.0.0/16") // => "10.224.1.5/16"
====更新2023/05/09 ===
- @Volker:到目前为止,你尝试了什么?你在哪里卡住了?*
非常抱歉,前面的描述不够详细。如果在纸上完成转换,我的想法如下:
我尝试了如何通过代码实现这个过程,我发现了一系列的转换方法,可以将ip转换为:[] byte、uint32等。
ip, ipNet, _ := net.ParseCIDR("10.222.1.2/16")
bytes := []byte(ip)
maskBits := binary.BigEndian.Uint32(ipNet.Mask)
ipBits := binary.BigEndian.Uint32(ip.To4())
prefix, _ := netip.ParsePrefix("10.222.1.2/16")
binary, _ := prefix.Addr().MarshalBinary()
但我不太确定这些东西意味着什么,以及如何操纵数据。
非常感谢@Zeke Lu,我正在学习理解这行代码,我使用的位运算符太少了,我对它们并不熟悉:
v := ((v2 >> (32 - bits)) << (32 - bits)) | ((v1 << bits) >> bits)
1条答案
按热度按时间6tqwzwtp1#
也许这就是你想要的:
注:未完全测试。请谨慎使用。