【发布时间】: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.254 到 CIDR。
我真的很困惑不同的工具会返回不同的结果。
另外,我的目标是为用户创建白名单,并在他们来的时候检查他们的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