我正在尝试编写C#代码,用于确定斜杠/符号中给出的ipv6地址的ipv6前缀(IPv4中的“子网”)。与路由器一样,这需要对ipv6地址进行按位操作,其前缀长度为(ipv4中的“子网掩码”)。
例如:给定2000:1234 :: 1234/64
代码将执行:
(2000:1234 :: 1234)AND(FFFF:FFFF:FFFF:FFFF) 并将确定此地址的前缀是2000:1234:0000:0000
我这样做的困难来自这样一个事实:与在两个整数上进行按位AND不同,我必须在byteArray或其他一些数据结构上进行。我的想法是使用IpAddress.getAddressBytes()将ipv6地址转换为字节数组,并将输入中的/ prefix整数转换为字节数组,并在两个数组上执行按位AND。
这是解决此问题的正确方法还是我应该研究其他选项,例如使用128位整数库而不是使用字节数组?
有没有人从经验中知道什么是最好的方法?