【发布时间】:2016-11-08 17:08:58
【问题描述】:
我得到了以下实现来将一堆 ips 解析成多个 cidr 范围。我最多限制为 50 个 cidr。我需要以某种方式添加该限制。我正在考虑计算每个 cidr 之间的距离以对它们进行分组,直到我达到某种递归算法的 50 限制。
有什么建议吗?
public static IEnumerable<string> Parse(IEnumerable<string> ipCollection)
{
var ips = ipCollection as IList<string> ?? ipCollection.ToList();
if (!ips.Any()) return Enumerable.Empty<string>();
var parsedIps = new List<IPNetwork>();
foreach (var ip in ips)
{
IPNetwork ipNetwork;
if (IPNetwork.TryParse(ip, out ipNetwork)) parsedIps.Add(ipNetwork);
}
// unable to parse any ips
if (!parsedIps.Any()) return Enumerable.Empty<string>();
return parsedIps.Count == 1
? ips.Select(ip => $"{ip}/32")
: IPNetwork.Supernet(parsedIps.ToArray()).Select(x => x.ToString());
}
【问题讨论】:
标签: .net network-programming cidr