2015-08-31 47 views
0

我有一組約5000個網絡範圍和相應的名稱(例如,192.168.0.0/24 - >"Network Z")。許多網絡重疊,mask-wise =具有較小掩碼的網絡可能包含具有較大網絡的網絡。如何高效查詢網絡(範圍)?

enter image description here

在上面的例子,IP 1應與NW D匹配(因爲它是最特定的,即,是最小的一個,具有最大的掩模),儘管它也將匹配NW BNW A

我使用netaddr實現了此搜索,並有一個網絡排序列表(由.size屬性升序),我通過查找第一個匹配來迭代。這個解決方案的工作原理很慢。

有沒有更好的解決方案?

編輯:跟隨答案,解決方案是將範圍作爲字典的鍵(get a list all the supernets of the IP),按相反順序迭代並檢查字典中是否存在鍵。這將給包含IP的最小網絡。

回答

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

+0

的範圍內這是一個極好的主意,謝謝!我將用基於'netaddr'的代碼更新這個問題 – WoJ