IT井戸端会議

IT井戸端会議

インフラ、ネットワーク、アプリケーション開発、IT界隈の話等々を東京都千代田区界隈から発信します。

ActivePerl 5.20.2 でCisco機器の操作を自動化してみた

みなさまこんにちは。

ネットワークエンジニアなら、きっと触るであろうCiscoのルータやスイッチ。レガシーですが、ネットワークエンジニアなら基本の「キ」といったところです。レガシー故に、機会は多いけど、毎回あまり代わり映えしない…。

 

そこで、テキスト処理に強く(即ちCUIの操作にも強い)、また各ベンダの機器用に様々なモジュールが公開されているPerlを使って、Cisco機器の操作を自動化してみたいと思います。こういうところで、他者と差別化を図ります(笑)。

 

<今回やること>

 

Windows用のPerl実行環境として、ActivePerl 5.20.2 をセットアップ

■ActivePerlにCisco用モジュールなどをインストール

■サンプルスクリプトを実行

■既に設定済みのCiscoルータにtelnet接続し、現在の設定を取得

 

では、始めます。

 

Windows用のPerl実行環境として、ActivePerl 5.20.2 をセットアップ

 

まずは↓から、ActivePerlのインストーラをダウンロード。

http://www.activestate.com/activeperl/downloads

環境に合わせて選べばよいのですが、実際に使う端末は大抵WIndowsなので、「Windows Installer (MSI)」を前提に話を進めます。

 

ダウンロードが完了したら、MSIパッケージのインストーラを実行します。

perl01

インストーラを開始したところ↑。

 

標準的な構成で、まずは進めます。実は終わるまで結構時間かかる。

perl02

インストーラが完了したところ↑。

 

perl03

そのまま終了させると、リリースノートが表示されます。

一応目を通し、そっと閉じます(笑)

 

■ActivePerlにCisco用モジュールなどをインストール

 

コマンドプロンプトを起動し、次のコマンドを一行ずつ実行します。

~~~~

cd c:/perl/bin

Set http_proxy=http://{Username}:{Password}@{HostAddress}:{PortNumber}

cpan install Net::Telnet::Cisco::IOS

cpan install Term::ReadKey

~~~~

 

上記コマンドの説明は、以下の通り。

 

~~~~

デフォルトで、Perlはc:perl 以下にセットアップされるので、カレントフォルダを移動します。

モジュールのセットアップ用に、環境変数にプロキシ情報を設定します。なければ不要です。

今回のキモとなる、Net::Telnet::Cisco::IOSモジュールを入れるコマンドです。

実行後にウィンドウがすぐ閉じてしまわないよう、キー入力を待つモジュールを入れるコマンドです。

~~~~

※8/13追記:

ActivePerlの初回インストール直後のモジュールインストール時は、Cコンパイラ(MinGW)のセットアップも勝手にされるので、結構時間かかります。

 

操作の自動化自体は、Teratermマクロでも実現できますが、プロンプトの応答メッセージなど、機種によって異なる要素を見越しながら確実に動作するように作り込むのは至難の業なので、ここはひとつ、モジュールでありがたく楽をさせていただきましょう。

 

■サンプルスクリプトを実行

 

以下のようなテキストファイルをエディタで作成し、拡張子plで保存します。

今回は『Ciscosample.pl』としました。

~~~~

use strict;

use warnings;

use Term::ReadKey;

use Net::Telnet::Cisco::IOS;

 

my $hostname = "192.168.0.1";

my $loginPass = "****";

my $enablePass = "****";

my $session = Net::Telnet::Cisco->new(Host => $hostname);

$session->login(Password => $loginPass);

 

if ($session->enable($enablePass)) {

print $session->cmd("show running-config");

} else {

warn "Can’t enable: " . $session->errmsg;

}

 

ReadMode 'cbreak';

print '続行するには何かキーを押してください...';

ReadKey(0);

 

$session->close;

~~~~

 

HostName(IPアドレス)とパスワードのところは、対象機器に合わせて適宜修正してください。

当然ですが、対象機器へ接続できるPC上で実行することが必須です。

今回のサンプルは、こちら↓を参考にさせていただきました。

http://www2u.biglobe.ne.jp/~MAS/perl/waza/telnet.html

 

■既に設定済みのCiscoルータにtelnet接続し、現在の設定を取得

perl07 perl08

保存したplファイルをダブルクリックして実行すると、こんな感じ↑。

とりあえず、自動的にtelnet接続して設定取得できていることが分かるかと思います。

 

今回は、取得した設定をテキストに保存するところまで書けていないので、そちらはまた次回ということで。

また、自分の場合オフライン環境でPCをセットアップせねばならないことも多かったので、モジュールのオフラインインストールも試してみます。

というか、実はというかやっぱりというか、モジュールのインストールはインストーラ完了後に既存フォルダ構成のコピペだけでいけました。

その辺の説明も、また改めて。