4

ほぼ 200,000 のネットワーク アドレス タイプを持つ postgres db があります。一部のサブネットが重複しているかどうかを検出したいと思います。たとえば、123.0.0.0/16、123.2.0.0/24、および 123.3.4.128/30 を検出して報告します。

私はすでに多くの python スクリプトと netaddr ライブラリを使用しています。

エントリの数を考慮して、重複を検出するための最良のアプローチ/アルゴリズムは何でしょうか?

各エントリをデータベース全体と比較するよりも良い方法があると確信しています。

4

2 に答える 2

1
import sys
import ipaddr
from pprint import pprint

from netaddr import IPNetwork, IPAddress
matching_subent=[]
def cidrsOverlap(cidr0):
    subnets_list = [IPNetwork('123.0.0.0/16'),
                    IPNetwork('123.2.0.0/24'), 
                    IPNetwork('123.132.0.0/20'),
                    IPNetwork('123.142.0.0/20')]
    flag = False
    for subnet in subnets_list:
        if (subnet.first <= cidr0.last and subnet.last >= cidr0.last): 
            matching_subent.append(subnet)


    print "Matching subnets for given %s are %s" %(cidr0, matching_subent)
    pprint(subnets_list) 

cidrsOverlap(IPNetwork(sys.argv[1]))
于 2016-10-18T09:50:41.663 に答える