全1611文字
PR

 LANスイッチやルーターといったネットワーク機器の状態を把握したり設定を変更したりするときには、リモートアクセスしてコマンドを実行することが多い(図2-1)。通常は、ターミナルソフトを使ってアクセスする。その場合、ログインのパスワードやコマンドを入力する必要があり面倒だ。これをPythonコードで自動化してみよう。

図2-1●PythonでLANスイッチにリモートアクセス
図2-1●PythonでLANスイッチにリモートアクセス
ネットワーク機器にTelnetでリモートアクセスする場合、ターミナルソフトを使う方法とプログラムでアクセスする方法がある。ターミナルソフトだとログインのパスワードやコマンドをいちいち入力する必要があるが、Pythonコードなどのプログラムなら実行するだけでコマンドの実行結果を得られる(LANスイッチの写真の出所はシスコシステムズ)。
[画像のクリックで拡大表示]

 ここでは、アクセス先の機器として米シスコシステムズのLANスイッチ「Catalyst 2960-8TC-L」を使った。「Cisco IOS」というOSを内蔵し、100Mビット/秒対応のポートを8基、1Gビット/秒対応のポートを1基搭載している。

 リモートアクセスのプロトコルとしてはTelnetを利用した。LANスイッチには「192.168.1.200」というIPアドレスを割り当て、特権パスワードとして「nikkei」、Telnetのパスワードとして「remote」を設定した。

すべての入力をコードに記述

 Pythonコードの中からTelnetでアクセスするにはtelnetlibというモジュールを利用する(図2-2)。コードの冒頭で「from telnetlib import Telnet」と記述し、telnetlibモジュールからTelnetクラスを読み込む。

図2-2●telnetlibモジュールを使ったTelnetアクセスの基本形
図2-2●telnetlibモジュールを使ったTelnetアクセスの基本形
まず通信先アドレスを指定してTelnetオブジェクトを生成する。「read_until」と「write」の組み合わせが1回の入力に相当するので、この組み合わせを繰り返す。
[画像のクリックで拡大表示]

 次に「with Telnet(通信先アドレス, 23) as tn:」と記述し、tnという名前でTelnetオブジェクトを生成する。あとは「read_until関数で表示を待ち受けてwrite関数で入力する」という処理を繰り返す。この1組の処理が1回の入力に相当する。

 Telnetでリモートアクセスするための入力をPythonコードに記述すれば、あとは自由にコマンドを実行できる。例えば、「show ip interface brief」というコマンドを実行し、各ポートに割り当てられているIPアドレスを表示できる(図2-3)。ここでは1Gビット/秒対応ポートにLANケーブルを接続しているので、このポートだけIPアドレスが表示されている。

図2-3●Telnetでアクセスしてコマンドを実行するPythonコードの実行結果
図2-3●Telnetでアクセスしてコマンドを実行するPythonコードの実行結果
LANスイッチにリモートアクセスし、「show ip interface brief」というコマンドを実行して、結果を表示している。
[画像のクリックで拡大表示]