IPv6前缀/前缀长度按位操作

时间:2014-01-04 01:08:33

标签: c# .net network-programming bit-manipulation ipv6

我正在尝试编写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位整数库而不是使用字节数组?

有没有人从经验中知道什么是最好的方法?

0 个答案:

没有答案