【问题标题】:IPv6 CIDR to rangeIPv6 CIDR 到范围
【发布时间】:2020-10-19 09:41:00
【问题描述】:

我有一个 CIDR Ipv6 地址列表

2c0f:fe40:8000::/48
2c0f:feb0::/43
2c0f:feb0:20::/45

如何在不使用外部库(不包含在 VS 安装中)的情况下获取 IP 范围从 - 到? 这不是 convert cidr to range 的重复,因为我的问题是指 IPv6 表示法,而不是 IPv4。

例子:

Input: 2c0f:fe40:8000::/48
Output: 2c0f:fe40:8000:0:0:0:0:0 - 2c0f:fe40:8000:ffff:ffff:ffff:ffff:ffff

【问题讨论】:

  • 你尝试过做什么?
  • @PavelAnikhouski 我尝试以某种方式将提到的问题中的解决方案转变为适用于 IPv6,但没有成功
  • 另外,您应该了解您的示例是被委派给/64 网络的前缀。您不应该将它们单独用作网络,因此第一个和最后一个地址没有多大意义。更有可能的是,您希望获得这些前缀的第一个和最后一个 /64 子网。获取/64 网络的第一个和最后一个地址非常容易(使用其他大小的网络可能会导致问题并破坏 IPv6 功能)。 IPv6 /64网络是网络中的第一个地址,可以将最后的::替换为ffff:ffff:ffff:ffff

标签: c# ipv6 cidr


【解决方案1】:

IPNetwork2 是一个很棒的 nuget 包,可以满足您几乎所有与网络地址相关的需求。

使用它,您可以轻松解析 IPV6 CIDR 并获取范围的第一个和最后一个 IP。

var ipnetwork = IPNetwork.Parse("2c0f:fe40:8000::/48");

Console.WriteLine("FirstUsable : {0}", ipnetwork.FirstUsable);
Console.WriteLine("LastUsable : {0}", ipnetwork.LastUsable);

来源地址为https://github.com/lduchosal/ipnetwork

【讨论】:

  • 不使用外部库
  • 公平地说,“不使用外部库(不包括在 VS 安装中)?”不清楚他们是否被允许。由于末尾的问号,我将其视为一个问题,如果它可以在没有外部库的情况下完成。
【解决方案2】:

我在不使用任何外部库的情况下为您的问题编写了一个快速解决方案 here you can find the source code

一个关于如何使用它的例子:

CidrBlock block = CidrBlock.Parse("2c0f:fe40:8000::/48");
Console.WriteLine($"Start address: {block.StartAddress.IPAddress}");
Console.WriteLine($"End address: {block.EndAddress.IPAddress}");

会回来

Start address: 2c0f:fe40:8000::
End address: 2c0f:fe40:8000:ffff:ffff:ffff:ffff:ffff

问候。-

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2023-04-07
    • 2022-07-05
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2021-06-29
    • 2012-11-04
    相关资源
    最近更新 更多