检查和更改IP地址范围的程序,不允许重叠



我需要用csv文件将网络区域及其名称输入到网络监控软件程序中。此软件将只获取区域名称、IP地址启动和IP地址停止。不允许任何IP范围重叠。

我们从网络团队获得列表,IP范围总是重叠的,所以到目前为止,我一直在使用excel函数来判断它们是否重叠,然后我必须使用IP地址计算器并剪切和粘贴来填充其间的范围。

基本上,我想打开这样的列表(csv):

Zone Name, IPStart, IPStop,Range,Source
Group A,10.0.0.0,10.127.255.255,10.0.0.0/9,New List
Group A Sales,10.16.0.0,10.31.255.255,10.16.0.0/12,New List
Group A Sales Primary routers,10.23.1.0,10.23.1.15,10.24.1.0/28,New List
Group A Sales Web Servers,10.16.0.0,10.19.255.255,10.16.0.0/14,New List
Group A Sales Web Servers - Primary,10.18.0.0,10.18.0.255,10.18.0.0/24,New List
Group A Marketing,10.62.0.0,10.62.255.255,10.62.0.0/16,New List
Group A Research,10.62.0.0,10.63.255.255,10.62.0.0/15,Old List
Group B,10.128.0.0,10.255.255.255,10.128.0.0/9,Old List

Into this (with the other ranges filled out as well):
Zone Name, IPStart, IPStop,Range,Source
Group A,10.0.0.0,10.15.255.255,10.0.0.0/12,New List
Group A Sales,10.24.0.0,10.31.255.255,10.24.0.0/13,New List
Group A Sales Web Servers,10.16.0.0,10.17.255.255,10.16.0.0/15,New List
Group A Sales Web Servers - Primary,10.18.0.0,10.18.0.255,10.18.0.0/24,New List
Group A Sales Web Servers,10.19.0.0,10.19.255.255,10.19.0.0/16,New List
Group A Sales,10.20.0.0,10.21.255.255,10.20.0.0/15,New List
Group A Sales,10.22.0.0,10.22.255.255,10.22.0.0/16,New List
Group A Sales,10.23.0.0,10.23.0.255,10.23.0.0/24,New List
Group A Sales Primary routers,10.23.1.0,10.23.1.15,10.24.1.0/28,New List
Group A Sales,10.23.1.16,10.23.1.31,10.23.1.16/28,New List
Group A Sales,10.23.1.32,10.23.1.63,10.23.1.32/27,New List
Group A Sales,10.23.1.64,10.23.1.127,10.23.1.64/26,New List
Group A Sales,10.23.1.128,10.23.1.255,10.23.1.128/25,New List
Group A Sales,10.23.2.0,10.23.3.255,10.23.2.0/23,New List
Group A Sales,10.23.4.0,10.23.7.255,10.23.4.0/22,New List
Group A Sales,10.23.8.0,10.23.15.255,10.23.8.0/21,New List
Group A Sales,10.23.16.0,10.23.31.255,10.23.16.0/20,New List
Group A Sales,10.23.32.0,10.23.63.255,10.23.32.0/19,New List
Group A Sales,10.23.64.0,10.23.127.255,10.23.64.0/18,New List
Group A Sales,10.23.128.0,10.23.255.255,10.23.128.0/17,New List
Group A Marketing,10.62.0.0,10.62.255.255,10.62.0.0/16,New List
Group A Research,10.63.0.0,10.63.255.255,10.62.0.0/16,Old List
Group B,10.128.0.0,10.255.255.255,10.128.0.0/9,Old List

该程序必须优先考虑"新列表"而不是"旧列表",但如果"旧列表》与"新列表中的任何内容都不重叠,则仍然包括"旧列表。"。

我是一个编程初学者,但我曾经了解c++,我正在学习Perl、PHP,并了解bash脚本和awk/gawk。我一直在互联网上寻找一个这样做的程序,但没有什么能接近。我甚至不知道该用哪种语言。

请注意,任何程序或至少一些起点都会非常有帮助。感谢

我最终将不得不编写该程序的部分内容,以比较和编辑区域名称,使其符合一定的长度,并根据另一个文件中的条目添加区域位置,所以请记住这一点。

编辑

我一直在学习Python,所以我想我会为此使用Python。我很难找到在Python中检查重叠的方法。我认为最后的代码将是检查重叠,然后返回两个范围中的所有IP地址,然后从较大范围中删除较小范围的地址,然后计算新的地址范围:追加和删除旧的地址范围。如果这有道理的话。

我现在并没有积极地处理这个问题,我正在处理代码的其他部分,以自动处理这些文件。但是,我怀疑这将是我代码中最复杂的部分,所以我们非常感谢您的帮助。

谢谢,B0T

看看cpan上的Net::IP模块,它有一个过程接口,使您能够指定IP范围并确定它们是否重叠。理想情况下,您将使用它的对象实现,但随后您需要知道什么是面向对象编程,以及如何在perl中进行编程。然后,该模块将使您能够创建子网对象,并确定是否有任何子网对象具有重叠范围。