如何有效地查询网络(范围)?

时间:2015-08-31 15:20:15

标签: python networking

我有一组大约5000个具有相应名称的网络范围(例如192.168.0.0/24 - > "Network Z")许多网络重叠,掩盖方式=具有较小掩码的网络可能包括网络较大的。

enter image description here

在上面的示例中,IP 1应该与NW D匹配(因为它是最具体的,即最小的,具有最大的掩码),即使它也匹配{{ 1}}和NW B

我使用NW A实现了这个搜索并且有一个排序的网络列表(按netaddr属性升序),我通过查找第一个匹配来迭代。这个解决方案有效,但速度很慢。

有更好的解决方案吗?

编辑:跟进答案,解决方法是将范围作为字典的键get a list all the supernets of the IP,以相反的顺序迭代它并检查是否存在密钥这个词。这将给出包含IP的最小网络。

1 个答案:

答案 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

的范围内