私はルーティングテーブルからIPを抽出する機能的なPython 2.7コードを持っています。 x.x.x.x/xx形式のipのみを抽出します。私はしかし、ルートテーブルのいくつかの行を除いて問題があります。たとえば、この行特定のIPを含めるか除外する正規表現
を:この行で
D 10.50.80.0/24 [90/3072] via 10.10.10.1, 3w6d, Vlan10
私は気にすべてが10.50.80.0/24です。これが/ 24表記の唯一のIPであるため、私はそれをつかみ、正規表現に/を付けないで(例えば、10.10.10.1)を無視させることができます。しかし表に、我々は2つの異常の下にあります
10.10.60.0/16 is variably subnetted, 58 subnets, 4 masks
C 10.10.140.0/24 is directly connected, Vlan240
私は、最初の行(10.10.60.0/16)二行目(10.10.140.0/24)にではなく、IPをキャプチャしたいと思います。プログラムはIPを抽出し、サブネットがテーブルで利用可能かどうかをチェックしています。 10.10.60.0/16は10.10.60.0/16がテーブルにあると言っているのではなく、このサブネットが可変サブネット化しているということだけを言っているので問題になります。
現在のところ、私のツールはこのIPをキャプチャしており、表に示すように10.10.60.0/16の範囲全体を真ではありません。私はいくつかの正規表現を編集しようとしましたが、実際にそれに満足していませんでした。誤ってサブネットを偶発的にスキップすることは特にありません。特に、最初のサブネットと似ている2番目のサブネットです。すべての正しいサブネットをキャプチャすることは非常に重要です。
誰かがこれを達成するための最良の正規表現編集を提案できますか?唯一の持っている行をスキップXXXX/XX可変サブネット化され、Xサブネット、Xマスクここ
私の現在のコードです:
match = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})', text)
おかげ デイモン
これはCiscoデバイスでは、show ip route' 'からの出力のように見える - 実際にテーブルのルート(つまりサマリーではない)は、ルートの起源(静的、接続、OSPF、EIGRPなど)を示す最初の文字として常に文字を持ちます。スペースで始まる行を破棄するか、いくつかの文字で始まる行だけを見ることができます( 'show ip route'は可能なことを示します)。 – Ben
これは良い解決策ですが、予期しないスペースや何かのために実際のIPを見逃す可能性があります。私は底の解決策がより安全だと信じています。 – Damon