C# IPv6地址范围的C语言实现#

C# IPv6地址范围的C语言实现#,c#,sockets,winsock,ipv6,ipv4,C#,Sockets,Winsock,Ipv6,Ipv4,我正在编写一个套接字服务器,它需要通过IP允许/限制,并试图使其与IPv4和IPv6兼容 我非常了解IPv4原则,例如,我可以允许192.168.0.0/255.255.255.0满足所有192.168.0.*地址的要求,基于我的代码 但是,这在IPv6中是如何工作的?i、 e如何使用该协议处理范围?按照约定,IPv6不像IPv4那样使用子网掩码格式。然而,你没有理由仍然不能以这种方式观想它 IPv6中/64的等效“子网掩码”将是ffff:ffff:ffff:fffff:0:0:0。只是不要尝试

我正在编写一个套接字服务器,它需要通过IP允许/限制,并试图使其与IPv4和IPv6兼容

我非常了解IPv4原则,例如,我可以允许192.168.0.0/255.255.255.0满足所有192.168.0.*地址的要求,基于我的代码


但是,这在IPv6中是如何工作的?i、 e如何使用该协议处理范围?

按照约定,IPv6不像IPv4那样使用子网掩码格式。然而,你没有理由仍然不能以这种方式观想它

IPv6中/64的等效“子网掩码”将是
ffff:ffff:ffff:fffff:0:0:0
。只是不要尝试引用任何IPv6用户,因为没有人会知道你的意思。不要尝试将其粘贴到任何IPv6配置中-人们只会使用诸如/64、/48、/32等前缀(小于/64的任何前缀,例如/96,都很少使用,并且正式不推荐用于LAN环境)

下面是我刚刚编写的一个方便的ASCII艺术图表,它可以帮助您理解IPv6前缀:

2001:db8:1000:2000:3000:4000:5000:6000/32
<--net--><-------------------host---->

2001:db8:1000:2000:3000:4000:5000:6000/48
<--network--> <--------------host---->

2001:db8:1000:2000:3000:4000:5000:6000/64
<--network-------> <---------host---->

2001:db8:1000:2000:3000:4000:5000:6000/96
<--network------------> <----host---->
2001:db8:1000:2000:3000:4000:5000:6000/32
2001:db8:1000:2000:3000:4000:5000:6000/48
2001:db8:1000:2000:3000:4000:5000:6000/64
2001:db8:1000:2000:3000:4000:5000:6000/96
希望上述方法与您可视化IPv4子网的方法相同(老实说,几乎完全相同)。事实上,在你的头脑中计算IPv6稍微容易一些,因为IPv6使用十六进制,所以如果你坚持使用可被4整除的前缀,你就可以在nybble(即数字)边界处划分你的子网-这是IPv4无法做到的


我承认我的答案中没有任何C#特定信息。尽管如此,它应该让您找到正确的方法:指定前缀长度。

感谢condsider提供的信息,我最终还是选择了屏蔽ala ffff:ffff::etc。