<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>jmblogのブログ</title>
<link>https://ameblo.jp/jmblog05/</link>
<atom:link href="https://rssblog.ameba.jp/jmblog05/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>ネットワークエンジニアのブログです。</description>
<language>ja</language>
<item>
<title>ネットワーク機器の管理の自動化2</title>
<description>
<![CDATA[ <p><span style="font-size:1.4em;"><font color="#0000f5"><b>このページの概要</b></font></span></p><p>前回の「<a href="https://ameblo.jp/jmblog05/entry-12966986504.html" rel="noopener noreferrer" target="_blank">ネットワーク機器の管理の自動化1</a>」で紹介したPythonスクリプトの詳細について書いていきます。</p><p>&nbsp;</p><p><font color="#0000f5"><span style="font-size: 22.4px;"><b>スクリプトの中身</b></span></font></p><p>ネットワーク機器の情報を取得する方法としてAPIを使わずテキスト検索をしています。具体的には以下の方法で情報を取得します。</p><p>&nbsp;</p><p><b style="font-weight:bold;">①</b>ログファイルのテキストをリストに変換します。</p><p><b style="font-weight:bold;">②</b>リスト内で空欄の値をすべて削除します。</p><p><b style="font-weight:bold;">③</b>enumerate関数を使って取得したい値に関連するキーワードのインデックスのリストを作成します。</p><p><b style="font-weight:bold;">④</b>同じキーワードが複数のshowコマンドの出力結果で使用されている可能性があります。キーワードのインデックスのリストの値をfor文で1つずつ検索し、その値の前後の値も確認して本当に該当するキーワードかどうか確認します。</p><p><b style="font-weight:bold;">⑤</b>該当していれば、関連するキーワードの前後にある取得したい値を取得します。</p><p>&nbsp;</p><p>具体的な例としてIPアドレス情報を取得したい場合、以下のような「show run」のインターフェース設定から取得します。</p><p>&nbsp;</p><p><font color="#b02317">interface Loopback0<br>&nbsp;ip address 3.3.3.3 255.255.255.255</font></p><p><font color="#b02317">!<br>interface FastEthernet4/0<br>&nbsp;description to_CORE01_Fa3_0<br>&nbsp;ip address 192.168.1.2 255.255.255.0<br>&nbsp;ip ospf network point-to-point<br>&nbsp;duplex full</font></p><p><font color="#b02317">&nbsp;speed auto</font></p><p>&nbsp;</p><p>手順①によって"interface", "Loopback0", "ip", "address", "3.3.3.3","255.255.255.255","!","interface","FastEthernet4/0","description"...のような階層のないリストに変換します。</p><p>手順③のenumerate関数では例えば「interface」をキーワードにインデックスのリストを作成します。「interface」というキーワードはログ内で別のshowコマンドの出力でも使用されているかもしれません。そのため本当に「show run」のインターフェースの箇所のものかどうか確認するため、「interface」のインデックスに+1した値が「Loopback◯」や「FastEthernet◯/◯」になっていることをチェックします。なっていたらfor文で1個ずつインデックスを足していき「ip」とそれに続く「address」が出てきたら、「address」の次の値はIPアドレス、その次の値はサブネットマスクというように値を取得できます。</p><p>&nbsp;</p><p>この方法でその他の情報も取得できます。よく問題になるのは機器側の設定のデスクリプションに「to CORE01 FastEthernet0/0」のように設定していると、手順①でファイルをリスト化した際にスペースをデリミタとして「to」、「CORE01」、「FastEthernet0/0」という値に分けられ「FastEthernet0/0」がshowコマンドの結果と判別できず、正しくデスクリプションの値を取得できないことがあります。機器側の設定を「to_CORE01_FastEthernet0/0」のようにアンダースコアでつなげて1つの値となるようにしておけば問題になりません。</p><p>&nbsp;</p><p><font color="#0000f5"><span style="font-size: 22.4px;"><b>APIを使わない理由</b></span></font></p><p>なぜAPIを使わなかったかと思うかもしれません。もともとこのスクリプトはAPIアクセスが許可されていない環境で作成したものでした。APIを使用しないので、作りこめば同じ方法で異なるメーカーや型番の機器でも対応できます。APIをサポートしていない機器や導入時点でコンソールアクセスしかできない場合などでもログさえ取得できれば利用できます。問題としてはメーカーや型番の違いによってshowコマンドの値の表示が異なるものはスクリプト側で作りこむ必要があることでしょう。</p><p>&nbsp;</p><p><font color="#0000f5"><span style="font-size: 22.4px;"><b>その他</b></span></font></p><p>エクセルへの書き込みにはopenpyxlライブラリを使用しました。xlsxライブラリと比較するとopenpyxlの方がずっといいです。</p><p>xlsxは「.xls」ファイルに対応していますが「.xlsx」ファイルには対応しません。またxlsxではエクセルのフィルタを設定できません。</p><p>&nbsp;</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/jmblog05/entry-12967024606.html</link>
<pubDate>Sat, 23 May 2026 08:38:15 +0900</pubDate>
</item>
<item>
<title>ネットワーク機器の管理の自動化1</title>
<description>
<![CDATA[ <p><span style="font-size:1.4em;"><font color="#0000f5"><span style="caret-color: rgb(0, 0, 245);"><b>このページの概要</b></span></font></span></p><p>ネットワーク機器の管理のために機器情報や設定項目をエクセルなどに一覧にしてまとめることが多々あります。例えば各機器のシリアル番号やIPアドレスを一覧にしたりします。これを手動で行う場合、一台ずつ機器にログインして必要な情報をコピペして作成することになります。数十台〜数百台の機器があると一日で終わらないかもしれません。また、機器や構成の変更がある度にこの一覧を更新する必要があります。情報が間違っていることも多々あります。</p><p>このような手動タスクを自動化する例としてPythonで作成したスクリプトを紹介します。</p><p>&nbsp;</p><p><span style="font-size:1.4em;"><font color="#0000f5"><b>スクリプトの動作</b></font></span></p><p>※WindowsにインストールしたGNS3で動作するCiscoルーターを使用しています。</p><p>&nbsp;</p><p><b style="font-weight:bold;">①ターミナルソフトで各Ciscoルーターにアクセスしてshowコマンドを実行。出力結果をログに保存します。</b></p><p>　</p><p>例えば以下のようなshowコマンドを実行します。</p><p><span style="color:#800000;">term len 0<br>show version<br>show run<br>show ip int brief<br>show cdp nei<br>show ip ospf nei<br>show ip bgp summary<br>show ip route<br>show ntp associations</span></p><p>&nbsp;</p><p>ログのファイル名は「ホスト名.txt」として複数機器のログを同じディレクトリに保存します。<br><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/a8/c6/j/o0424038615785154530.jpg"><img alt="" contenteditable="inherit" height="382" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/a8/c6/j/o0424038615785154530.jpg" width="420"></a></p><p>&nbsp;</p><p><b style="font-weight:bold;">②今回紹介するPythonスクリプトを実行し、①で取得したログを保存したディレクトリを指定します。</b></p><p>&nbsp;</p><p>「cisco_audit.pyw」をダブルクリックします。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/a6/28/j/o0292018315785155483.jpg"><img alt="" height="183" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/a6/28/j/o0292018315785155483.jpg" width="292"></a></p><p>※このスクリプトではtkinterによるGUIのウィンドウが表示されます。Pythonのファイルの拡張子を「pyw」とすることで「py」の場合と違って、Pythonのコンソール画面（CLI画面）は表示させずGUIの画面のみを表示させています。</p><p>&nbsp;</p><p>以下のGUIウィンドウが表示されます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/f8/64/j/o1182028915785156700.jpg"><img alt="" contenteditable="inherit" height="201" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/f8/64/j/o1182028915785156700.jpg" width="820"></a></p><p>&nbsp;</p><p>ステップ1の「コマンド一覧表示」ボタンをクリックすると「tmp.txt」というテキストファイルが開きます。①で取得するshowコマンドをコピペできます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/3e/86/j/o0325032515785157254.jpg"><img alt="" height="325" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/3e/86/j/o0325032515785157254.jpg" width="325"></a></p><p>&nbsp;</p><p>ステップ2の「ディレクトリ選択」ボタンをクリックすると「フォルダーの選択」ウィンドウがポップアップします。</p><p>①で取得したログのディレクトリを選択します。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/3c/4e/j/o0571038415785157630.jpg"><img alt="" height="282" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/3c/4e/j/o0571038415785157630.jpg" width="420"></a></p><p>&nbsp;</p><p><b style="font-weight:bold;">③結果が記載されたエクセルファイルが生成されます。</b></p><p>&nbsp;</p><p>スクリプトファイルと同じディレクトリにエクセルファイル「result.xlsx」が生成され、自動で開きます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/7f/ee/j/o0394017315785158253.jpg"><img alt="" contenteditable="inherit" height="173" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/7f/ee/j/o0394017315785158253.jpg" width="394"></a></p><p>&nbsp;</p><p><span style="font-size:1.4em;"><font color="#0000f5"><b>生成されたエクセルファイルの中身</b></font></span></p><p>「result.txt」は2つのシート「IP」、「Status」があります。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/6b/9c/j/o0773024115785158797.jpg"><img alt="" contenteditable="inherit" height="256" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/6b/9c/j/o0773024115785158797.jpg" width="820"></a></p><p>&nbsp;</p><p>それぞれ以下の情報が含まれます。</p><p><b style="font-weight:bold;"><span style="color:#004920;">「IP」シート：&nbsp;IPアドレス関連の情報</span></b><br><span style="color:#cc0000;">&nbsp; &nbsp; &nbsp; &nbsp;インターフェース名<br>&nbsp; &nbsp; &nbsp; &nbsp;IPアドレス<br>&nbsp; &nbsp; &nbsp; &nbsp;サブネットマスク<br>&nbsp; &nbsp; &nbsp; &nbsp;プレフィックス<br>&nbsp; &nbsp; &nbsp; &nbsp;ネットワークアドレス<br>&nbsp; &nbsp; &nbsp; &nbsp;ホスト範囲<br>&nbsp; &nbsp; &nbsp; &nbsp;ステータス(UP/DOWN)<br>&nbsp; &nbsp; &nbsp; &nbsp;デスクリプション</span><br>&nbsp;</p><p><b style="font-weight:bold;"><span style="color:#004920;">&nbsp;「Status」シート：機器のステータス情報</span></b><br><span style="color:#cc0000;">&nbsp; &nbsp; &nbsp; &nbsp;HWモデル<br>&nbsp; &nbsp; &nbsp; &nbsp;ソフトウエアバージョン<br>&nbsp; &nbsp; &nbsp; &nbsp;アップタイム<br>&nbsp; &nbsp; &nbsp; &nbsp;インターフェースの状態<br>&nbsp; &nbsp; &nbsp; &nbsp;CDP<br>&nbsp; &nbsp; &nbsp; &nbsp;OSPFネイバー<br>&nbsp; &nbsp; &nbsp; &nbsp;BGPネイバー<br>&nbsp; &nbsp; &nbsp; &nbsp;デフォルトルート<br>&nbsp; &nbsp; &nbsp; &nbsp;NTP同期の状態</span></p><p>&nbsp;</p><p><span style="color:#000000;">①<b style="font-weight:bold;">「IP」シートの詳細</b></span></p><p>このシートではIPアドレスに特化した情報を表示します。機器からIPアドレス情報を取得するだけでなく、サブネットマスクをプレフィックス表示に変換したものを表示したり、ホストアドレスの範囲も表示します。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/64/1e/j/o1264053015785160268.jpg"><img alt="" contenteditable="inherit" height="344" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/64/1e/j/o1264053015785160268.jpg" width="820"></a></p><p><span style="color:#cc0000;">A列：ホスト名</span></p><p><span style="color:#cc0000;">B列：インターフェース名</span></p><p><span style="color:#cc0000;">C列：IPアドレス</span></p><p><span style="color:#cc0000;">D列：サブネットマスク</span></p><p><span style="color:#cc0000;">E列：プレフィックス</span></p><p><span style="color:#cc0000;">F列：ネットワークアドレス</span></p><p><span style="color:#cc0000;">G列：ホストアドレスの範囲</span></p><p><span style="color:#cc0000;">H列：インターフェースのステータス</span></p><p><span style="color:#cc0000;">I列：デスクリプション</span></p><p>&nbsp;</p><p>特定の機器や特定のインターフェース（例：「Loopback」）などでフィルタできます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/00/86/j/o0928016015785161251.jpg"><img alt="" contenteditable="inherit" height="141" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/00/86/j/o0928016015785161251.jpg" width="820"></a></p><p>「IP address」の列の値をコピーしてpingツール（ExPingなど）に張り付けることもできます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/cb/e9/j/o0928020515785161262.jpg"><img alt="" contenteditable="inherit" height="182" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/cb/e9/j/o0928020515785161262.jpg" width="820"></a></p><p>&nbsp;</p><p><span style="color:#000000;">②<b style="font-weight:bold;">「Status」シートの詳細</b></span></p><p><span style="color:#000000;">このシートでは機器情報や機器状態を表示します。インベントリ管理、正常性の確認などに活用できます。</span></p><p><a href="https://stat.ameba.jp/user_images/20260523/07/jmblog05/a8/b3/j/o1248057815785162085.jpg"><img alt="" contenteditable="inherit" height="381" src="https://stat.ameba.jp/user_images/20260523/07/jmblog05/a8/b3/j/o1248057815785162085.jpg" width="820"></a></p><p><span style="color:#cc0000;">A列：ホスト名</span></p><p><span style="color:#cc0000;">B列：カテゴリ1&nbsp; &nbsp;: 「1.system」、「2.interface」、「3.routing」、「4.ntp」</span></p><p><span style="color:#cc0000;">C列：カテゴリ2&nbsp; &nbsp;:&nbsp; カテゴリ1の詳細</span></p><p><span style="color:#cc0000;">D列：フラグ 　　:&nbsp; エラーの有無</span></p><p><span style="color:#cc0000;">E列：コマンド&nbsp; &nbsp; ： showコマンド&nbsp;</span></p><p><span style="color:#cc0000;">F列以降　　　　：値</span></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="color:#400e73;">【機器情報】</span></b></p><p>B列を「1.system」、C列を「1.hardware model」でフィルタするとHWモデル情報を一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/82/0d/j/o0770015615785163415.jpg"><img alt="" contenteditable="inherit" height="166" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/82/0d/j/o0770015615785163415.jpg" width="820"></a></p><p>B列を「1.system」、C列を「2.software version」でフィルタするとSWバージョン情報を一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/20/58/j/o0778016715785163419.jpg"><img alt="" contenteditable="inherit" height="176" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/20/58/j/o0778016715785163419.jpg" width="820"></a></p><p>&nbsp;</p><p><b style="font-weight:bold;"><span style="color:#400e73;">【インターフェース情報】</span></b></p><p>B列を「2.interface」でフィルタするとインターフェースの情報を一覧表示できます。「IP」シートの情報ではIPアドレスが設定されているインターフェースのみ対象としていますが、ここではIPアドレスがないインターフェースも表示します。CDPで取得した対向の機器の情報も表示します。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/b2/ac/j/o1235034015785164154.jpg"><img alt="" contenteditable="inherit" height="226" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/b2/ac/j/o1235034015785164154.jpg" width="820"></a></p><p><br><span style="color:#400e73;"><b style="font-weight:bold;">【ルーティング情報】</b></span></p><p>B列を「3.routing」、C列を「1.ospf」でフィルタすればOSPFネイバーの状態を一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/68/27/j/o1053017915785164681.jpg"><img alt="" contenteditable="inherit" height="139" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/68/27/j/o1053017915785164681.jpg" width="820"></a></p><p>B列を「3.routing」、C列を「2.bgp」でフィルタすればBGPピアの状態を一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/3a/d6/j/o0942022415785165086.jpg"><img alt="" contenteditable="inherit" height="195" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/3a/d6/j/o0942022415785165086.jpg" width="820"></a></p><p>B列を「3.routing」、C列を「3.default route」でフィルタすればデフォルトルートを一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/64/3c/j/o1127019715785165308.jpg"><img alt="" contenteditable="inherit" height="143" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/64/3c/j/o1127019715785165308.jpg" width="820"></a></p><p>&nbsp;</p><p><span style="color:#400e73;"><b style="font-weight:bold;">【NTP情報】</b></span></p><p>B列を「4.ntp」でフィルタすればNTPの同期状態を一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/f8/52/j/o0937021515785165495.jpg"><img alt="" contenteditable="inherit" height="187" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/f8/52/j/o0937021515785165495.jpg" width="820"></a></p><p>&nbsp;</p><p><span style="color:#400e73;"><b style="font-weight:bold;">【エラー判定】</b></span></p><p>D列を「check!!」または「error!!」でフィルタすると状態の項目（OSPF、BGP、デフォルトルート、NTP)での注意すべきまたは異常な項目を一覧表示できます。</p><p><a href="https://stat.ameba.jp/user_images/20260523/08/jmblog05/f1/ae/j/o1258035815785165740.jpg"><img alt="" contenteditable="inherit" height="234" src="https://stat.ameba.jp/user_images/20260523/08/jmblog05/f1/ae/j/o1258035815785165740.jpg" width="820"></a></p><p>&nbsp;</p><p>次回はこのスクリプトの中身について書いていきたいと思います。</p>
]]>
</description>
<link>https://ameblo.jp/jmblog05/entry-12966986504.html</link>
<pubDate>Fri, 22 May 2026 20:18:33 +0900</pubDate>
</item>
</channel>
</rss>
