我需要将一系列IP加载到报告应用程序中,不幸的是,该应用程序不了解子网,也不允许我将几百万个IP地址加载到其中。不过,它允许我使用通配符加载数据,因此我希望通过使用通配符整合网络上的IP地址,将我的IP列表压缩为更易于管理的大小,但我也不希望无意中包括不在网络列表中的IP,这会使这变得更复杂
我有一个CIDR格式的网络列表(例如:192.168.1.0/24),可以很容易地得到这样的最小和最大IP地址
import ipaddress
TheSubnets = open('Networks.txt', 'r')
for network in TheSubnets.readlines():
AllIPs = ipaddress.IPv4Network(network.strip())
minIP = AllIPs[0]
maxIP = AllIPs[-1]
然而,我不知道的是如何有效地整合它们,以生成一组可以覆盖网络上所有IP的通配符IP地址
24位子网掩码很简单,我只删除了最后一个八位字节,因此192.168.1.0/24将只是192.168.1。*
但是,对于不同的子网,这变得更加棘手:
是否有一种简单的方法将主机列表合并为通配符列表,以确保每个网络中只有IP地址与通配符值匹配
这比我预想的要复杂得多,但这应该行得通
convert_range
是主要函数所有测试用例的输出:
注意
gen_patterns
并不试图利用255是最高允许值这一事实,因此以255结尾的一些范围将显式地具有250
、251
、255
而不是25?
相关问题 更多 >
编程相关推荐