このページの概要
ネットワーク機器の管理のために機器情報や設定項目をエクセルなどに一覧にしてまとめることが多々あります。例えば各機器のシリアル番号やIPアドレスを一覧にしたりします。これを手動で行う場合、一台ずつ機器にログインして必要な情報をコピペして作成することになります。数十台〜数百台の機器があると一日で終わらないかもしれません。また、機器や構成の変更がある度にこの一覧を更新する必要があります。情報が間違っていることも多々あります。
このような手動タスクを自動化する例としてPythonで作成したスクリプトを紹介します。
スクリプトの動作
※WindowsにインストールしたGNS3で動作するCiscoルーターを使用しています。
①ターミナルソフトで各Ciscoルーターにアクセスしてshowコマンドを実行。出力結果をログに保存します。
例えば以下のようなshowコマンドを実行します。
term len 0
show version
show run
show ip int brief
show cdp nei
show ip ospf nei
show ip bgp summary
show ip route
show ntp associations
ログのファイル名は「ホスト名.txt」として複数機器のログを同じディレクトリに保存します。
②今回紹介するPythonスクリプトを実行し、①で取得したログを保存したディレクトリを指定します。
「cisco_audit.pyw」をダブルクリックします。
※このスクリプトではtkinterによるGUIのウィンドウが表示されます。Pythonのファイルの拡張子を「pyw」とすることで「py」の場合と違って、Pythonのコンソール画面(CLI画面)は表示させずGUIの画面のみを表示させています。
以下のGUIウィンドウが表示されます。
ステップ1の「コマンド一覧表示」ボタンをクリックすると「tmp.txt」というテキストファイルが開きます。①で取得するshowコマンドをコピペできます。
ステップ2の「ディレクトリ選択」ボタンをクリックすると「フォルダーの選択」ウィンドウがポップアップします。
①で取得したログのディレクトリを選択します。
③結果が記載されたエクセルファイルが生成されます。
スクリプトファイルと同じディレクトリにエクセルファイル「result.xlsx」が生成され、自動で開きます。
生成されたエクセルファイルの中身
「result.txt」は2つのシート「IP」、「Status」があります。
それぞれ以下の情報が含まれます。
「IP」シート: IPアドレス関連の情報
インターフェース名
IPアドレス
サブネットマスク
プレフィックス
ネットワークアドレス
ホスト範囲
ステータス(UP/DOWN)
デスクリプション
「Status」シート:機器のステータス情報
HWモデル
ソフトウエアバージョン
アップタイム
インターフェースの状態
CDP
OSPFネイバー
BGPネイバー
デフォルトルート
NTP同期の状態
①「IP」シートの詳細
このシートではIPアドレスに特化した情報を表示します。機器からIPアドレス情報を取得するだけでなく、サブネットマスクをプレフィックス表示に変換したものを表示したり、ホストアドレスの範囲も表示します。
A列:ホスト名
B列:インターフェース名
C列:IPアドレス
D列:サブネットマスク
E列:プレフィックス
F列:ネットワークアドレス
G列:ホストアドレスの範囲
H列:インターフェースのステータス
I列:デスクリプション
特定の機器や特定のインターフェース(例:「Loopback」)などでフィルタできます。
「IP address」の列の値をコピーしてpingツール(ExPingなど)に張り付けることもできます。
②「Status」シートの詳細
このシートでは機器情報や機器状態を表示します。インベントリ管理、正常性の確認などに活用できます。
A列:ホスト名
B列:カテゴリ1 : 「1.system」、「2.interface」、「3.routing」、「4.ntp」
C列:カテゴリ2 : カテゴリ1の詳細
D列:フラグ : エラーの有無
E列:コマンド : showコマンド
F列以降 :値
【機器情報】
B列を「1.system」、C列を「1.hardware model」でフィルタするとHWモデル情報を一覧表示できます。
B列を「1.system」、C列を「2.software version」でフィルタするとSWバージョン情報を一覧表示できます。
【インターフェース情報】
B列を「2.interface」でフィルタするとインターフェースの情報を一覧表示できます。「IP」シートの情報ではIPアドレスが設定されているインターフェースのみ対象としていますが、ここではIPアドレスがないインターフェースも表示します。CDPで取得した対向の機器の情報も表示します。
【ルーティング情報】
B列を「3.routing」、C列を「1.ospf」でフィルタすればOSPFネイバーの状態を一覧表示できます。
B列を「3.routing」、C列を「2.bgp」でフィルタすればBGPピアの状態を一覧表示できます。
B列を「3.routing」、C列を「3.default route」でフィルタすればデフォルトルートを一覧表示できます。
【NTP情報】
B列を「4.ntp」でフィルタすればNTPの同期状態を一覧表示できます。
【エラー判定】
D列を「check!!」または「error!!」でフィルタすると状態の項目(OSPF、BGP、デフォルトルート、NTP)での注意すべきまたは異常な項目を一覧表示できます。
次回はこのスクリプトの中身について書いていきたいと思います。

















