LANスイッチやルーターといったネットワーク機器の状態を把握したり設定を変更したりするときには、リモートアクセスしてコマンドを実行することが多い(図2-1)。通常は、ターミナルソフト▼を使ってアクセスする。その場合、ログインのパスワードやコマンドを入力する必要があり面倒だ。これをPythonコードで自動化してみよう。
ここでは、アクセス先の機器として米シスコシステムズの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クラスを読み込む。
次に「with Telnet(通信先アドレス, 23) as tn:」と記述し、tnという名前でTelnetオブジェクトを生成する。あとは「read_until関数で表示を待ち受けてwrite関数で入力する」という処理を繰り返す。この1組の処理が1回の入力に相当する。
Telnetでリモートアクセスするための入力をPythonコードに記述すれば、あとは自由にコマンドを実行できる。例えば、「show ip interface brief」というコマンドを実行し、各ポートに割り当てられているIPアドレスを表示できる(図2-3)。ここでは1Gビット/秒対応ポートにLANケーブルを接続しているので、このポートだけIPアドレスが表示されている。