我有一组大约5000个具有相应名称的网络范围(例如192.168.0.0/24
- > "Network Z"
)许多网络重叠,掩盖方式=具有较小掩码的网络可能包括网络较大的。
在上面的示例中,IP 1
应该与NW D
匹配(因为它是最具体的,即最小的,具有最大的掩码),即使它也匹配{{ 1}}和NW B
。
我使用NW A
实现了这个搜索并且有一个排序的网络列表(按netaddr
属性升序),我通过查找第一个匹配来迭代。这个解决方案有效,但速度很慢。
有更好的解决方案吗?
编辑:跟进答案,解决方法是将范围作为字典的键get a list all the supernets of the IP,以相反的顺序迭代它并检查是否存在密钥这个词。这将给出包含IP的最小网络。
答案 0 :(得分:0)
使用面具。要获得子网,您和掩码的地址。如果你使用多个地址并使用最小的掩码,那么相同的结果将成为更大子网的一部分。
例如:
10.11.12.13/32
10.11.12.12/31
10.11.12.12/30
10.11.12.8/29
10.11.12.0/28
10.11.12.0/27
10.11.12.0/26
10.11.12.0/25
10.11.12.0/24
使用最小的掩码(255.255.255.0
)掩盖每个地址,您将看到它们都在10.11.12.0/24