【问题标题】:Convert IP addresses range to CIDR format and vice versa将 IP 地址范围转换为 CIDR 格式,反之亦然
【发布时间】:2016-05-22 14:24:45
【问题描述】:

我需要将IP 范围转换为CIDR 表示法,反之亦然。我通过IPNetwork 库通过以下方式解决了这个问题:

CIDR 转换为范围:

    var ip = IPNetwork.Parse("192.168.168.100/24");
    Console.WriteLine(ip.FirstUsable.ToString() + "/" + ip.LastUsable.ToString());

以及从范围到CIDR的转换:

    IPNetwork network = IPNetwork.Parse("192.168.168.0");
    IPNetwork network2 = IPNetwork.Parse("192.168.168.255"); 
    IPNetwork ipnetwork = IPNetwork.Supernet(network, network2);
    Console.WriteLine(ipnetwork.FirstUsable + "/" + ipnetwork.Cidr);

它似乎可以正常工作。但是当我使用自定义工具时,它们会返回一些不同的结果。

对于192.168.168.100/24

IPNetwork 库返回 192.168.168.1 - 192.168.168.254

http://www.ipaddressguide.com/cidr 返回 192.168.168.0 - 192.168.168.255

http://ipconvertertools.com/cidr2ipranges 返回 192.168.168.1 - 192.168.168.254

http://ip2cidr.com/bulk-ip-to-cidr-converter.php 返回

192.168.168.1/32
192.168.168.2/31
192.168.168.4/30
192.168.168.8/29
192.168.168.16/28

当我尝试转换时 192.168.168.1 - 192.168.168.254CIDR。 我真的很困惑不同的工具会返回不同的结果。 另外,我的目标是为用户创建白名单,并在他们来的时候检查他们的IPs,所以这是一个非常重要的问题。

【问题讨论】:

  • 阅读serverfault.com/a/10989/100461,它解释得很好。
  • @JoachimPileborg 那么用户可以拥有以 0 或 255 结尾的 ips 吗?
  • 如果您阅读链接的答案,它会说以0 结尾在某些有限的情况下有效,并且255 是广播地址(任何单个系统都不能使用)。所以是的,两个有效的地址,但不是真的在范围内。
  • @JoachimPileborg 非常感谢您,但是您对ip2cidr.com/bulk-ip-to-cidr-converter.php 结果有何看法?

标签: c# network-programming ip cidr


【解决方案1】:

鉴于 192.168.168.100/24 的 CIDR 表示法:

Network address is 192.168.168.0 
First usable address is 192.168.168.1
Last usable address is 192.168.168.254 
Broadcast address is 192.168.168.255 
Network mask is 255.255.255.0

没有也不能没有歧义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2022-01-13
    • 1970-01-01
    • 2017-08-23
    • 2017-04-23
    • 2016-04-13
    • 2010-11-05
    相关资源
    最近更新 更多