0
我有一組約5000個網絡範圍和相應的名稱(例如,192.168.0.0/24
- >"Network Z"
)。許多網絡重疊,mask-wise =具有較小掩碼的網絡可能包含具有較大網絡的網絡。如何高效查詢網絡(範圍)?
在上面的例子,IP 1
應與NW D
匹配(因爲它是最特定的,即,是最小的一個,具有最大的掩模),儘管它也將匹配NW B
和NW A
。
我使用netaddr
實現了此搜索,並有一個網絡排序列表(由.size
屬性升序),我通過查找第一個匹配來迭代。這個解決方案的工作原理很慢。
有沒有更好的解決方案?
編輯:跟隨答案,解決方案是將範圍作爲字典的鍵(get a list all the supernets of the IP),按相反順序迭代並檢查字典中是否存在鍵。這將給包含IP的最小網絡。
的範圍內這是一個極好的主意,謝謝!我將用基於'netaddr'的代碼更新這個問題 – WoJ