Алгоритм для вычитания одного диапазона IP из другого - C#
Формулировка задачи:
Есть два файла с диапазонами IP адресов вида:
2.60.0.0-2.60.2.255
2.60.4.0-2.60.8.255
2.60.10.0-2.60.10.255
2.60.13.0-2.60.13.255
Нужно сформировать третий диапазон. Из первого файла original.txt исключить диапазоны из файла subtract.txt
Я уже голову себе сломал. Ничего умнее, чем решать "в лоб" придумать не могу. А это - найти все IP из диапазонов первого файла, найти все IP из диапазонов второго файла, выкинуть лишнее. А потом снова как-то привести к диапазонам
Ещё нашёл такую штуку:
http://ipnetwork.codeplex.com/
Работает так:
И есть у этого класса разные прикольные методы. Но ничего подходящего я найти всё равно не смог. Впрочем у меня диапазоны для "вычитания" и в этом формате. Файл - subtractRanges.txt
Посоветуйте, что делать с этой проблемой.
IPNetwork ipnetwork = IPNetwork.Parse("192.168.168.100/24"); Console.WriteLine("Network : {0}", ipnetwork.Network); Console.WriteLine("Netmask : {0}", ipnetwork.Netmask); Console.WriteLine("Broadcast : {0}", ipnetwork.Broadcast); Console.WriteLine("FirstUsable : {0}", ipnetwork.FirstUsable); Console.WriteLine("LastUsable : {0}", ipnetwork.LastUsable); Console.WriteLine("Usable : {0}", ipnetwork.Usable); Console.WriteLine("Cidr : {0}", ipnetwork.Cidr);
Решение задачи: «Алгоритм для вычитания одного диапазона IP из другого»
textual
Листинг программы
bool excluded; foreach (string origItem in orig) { ipOrig = IPRange.Parse(origItem); excluded = false; foreach (string subtractItem in subtract) { ipSub = IPRange.Parse(subtractItem); IPRange[] res = ipOrig.Exclude(ipSub); if (res.Length > 0) { sw.WriteLine(res[0].ToString()); sw.WriteLine(res[1].ToString()); Console.WriteLine(res[0].ToString()); Console.WriteLine(res[1].ToString()); excluded = true; } } if (!excluded) { sw.WriteLine(ipOrig.ToString()); Console.WriteLine(ipOrig.ToString()); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д