【问题标题】:IPv6 Address Ranging in C#C# 中的 IPv6 地址范围
【发布时间】:2011-01-22 01:23:22
【问题描述】:

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

我非常了解 IPv4 原理,例如我可以允许 192.168.0.0/255.255.255.0 满足所有 192.168.0.* 地址,基于我的代码 http://blogs.msdn.com/b/knom/archive/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx

但是,这如何与 IPv6 一起使用?即如何使用该协议处理范围?

【问题讨论】:

    标签: c# sockets winsock ipv6 ipv4


    【解决方案1】:

    按照惯例,IPv6 不像 IPv4 那样使用子网掩码格式。但是,您没有理由仍然不能以这种方式对其进行可视化。

    IPv6 中 /64 的等效“子网掩码”为 ffff:ffff:ffff:fffff:0: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---->
    

    希望以上内容与您可视化 IPv4 子网的方式相同(老实说,几乎完全相同)。事实上,计算 IPv6 在你的头脑中稍微容易一些,因为 IPv6 使用十六进制,所以如果你坚持使用可被 4 整除的前缀,你就可以在 nybble(即数字)边界处划分子网——这是 IPv4 无法做到的!

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

    【讨论】:

    • 感谢您提供的信息,最后我确实使用了掩蔽 ala ffff:ffff:: 等。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2021-06-29
    • 2019-08-26
    • 2019-07-13
    相关资源
    最近更新 更多