2017-01-21 3 views
0

この問題は大きなプロジェクトの一部です。最初にプロジェクトを始めましょう。それは私が達成したいことを説明するのに役立つかもしれません。私が働いている会社にはAWSアカウントがたくさんあり、これらのアカウントには多くのセキュリティグループ(SS)があります。そして、彼らは多くのインバウンドとアウトバウンドのルールを持っています。問題は、互いに重なり合うルールが非常に多いことです。ネットワークがPythonを使用するより大きいネットワークの一部であるかどうか確認してください

例:1つのsgに、ポートの10.0.1.0/24インバウンドアクセスを許可するルールがあります.1234と言いますが、同時に10.0.0.0/16のすべてのアクセスを許可する別のルールがありますポート。前者のルールは明確に要求されていません。これで、あなたの想像力が荒くなり、他のセキュリティグループ、個々のips、インバウンドおよびアウトバウンドのアクセスを考慮に入れることができます。

これを手作業で行う必要があるのは悪夢です。だから私はプログラムでこれを行うことにしました。私はこれらの日にPythonスクリプティングを手に入れようとしています。これは始めるには完璧な場所のようです。しかし、私は非常に最初の段階で立ち往生しています。これを行うには、私は3つのものを比較する方法が必要だと思う。

  • 個々のipまたはipsがネットワークの一部である場合。
  • ネットワークがより大きいネットワークの一部である場合。
  • ポート範囲のポートが大きいポート範囲の一部である場合。

グーグルの最初の点は、私にいくつかの結果を示しました。私はipaddressモジュールと一緒に行くと思います。しかし、私は第2のポイントを行う方法を理解することができません。私はスマートな$$を試して試してみましたが、成功しませんでした。

>>> import ipaddress 
>>> network1 = u'10.0.0.0/16' 
>>> ipaddress1 = u'10.0.1.10' 
>>> ipaddress.ip_address(ipaddress1) in ipaddress.ip_network(network1) 
True 
>>> 
>>> network2 = u'10.0.1.0/24' 
>>> ipaddress.ip_network(network2) in ipaddress.ip_network(network1) 
False 
>>> 

これはそうです。私は問題を説明してくれることを願っています。私はより多くの情報を提供しようとします。

ご協力いただければ幸いです。そして、私はこの全体的なプロジェクトを解決する方法を聞くのが大好きです。私はそれが非常に一般的な問題であると想定することは安全だと思います。

ありがとうございます。

+0

を多分あなたはより良い説明する必要があります:あなた」 2回目のテストでFalseになった - それは間違っていますか? – postoronnim

答えて

0

このネットワークは、一部または全部を他のあるいは他に含まれている場合は、overlaps()

重複(その他)

真を使用して試すことができますが、完全にこのネットワークに含まれています。

>>> bigNet = ipaddress.ip_network('10.0.0.0/16') 
>>> smallNet = ipaddress.ip_network('10.0.0.0/24') 
>>> 
>>> smallNet.overlaps(bigNet) 
True 

しかし、それは両方の方法を動作しますので、それは十分ではありません。

>>> bigNet.overlaps(smallNet) 
True 

だから我々はあまりにプレフィックス長を確認することができます。

>>> contains(bigNet,smallNet) 
>>> def contains(net1, net2): 
    return net1.overlaps(net2) and net1.prefixlen >= net2.prefixlen 

>>> contains(bigNet,smallNet) 
False 
>>> contains(smallNet,bigNet) 
True 
+0

ありがとうございます。これは私が尋ねたことのためです。 – Abhinav

関連する問題