LoginSignup
3
1

More than 5 years have passed since last update.

ネットワーク機器の情報をtelnetで取得する。

Last updated at Posted at 2018-04-14

はじめに

スクリプトを使ってネットワーク機器をhogehogeすることが流行っていますが、プログラミングができないネットワーク管理者でも簡単に使えるものを作りました。
記述したコマンドを順番に実行し、その結果を標準出力とホスト名.txtというファイルに出力します。

動作を確認したサーバー環境

  • Ubuntu 16.04.4
  • Perl 5.22.1
    • Net::Telnetモジュールが必要です。

動作を確認したネットワーク機器

  • Alaxala AX2430S、AX2530S
  • NEC QXシリーズ

ちょっとしたコツ

多くのネットワーク機器のデフォルトの状態ではshowコマンドを実行するとページャーが動作します。ページャーが動作するとスペースキーなどを押さないと先に進めない状態になるので、スクリプトで何かを行うときには不向きです。スクリプトで何かを行うときはページャーを必ず無効にしましょう。
各ネットワーク機器でページャーを無効にするコマンドは以下の通りです。

  • Alaxala:set terminal pager disable
  • NEC QXシリーズ:screen-length disable

使い方

この例ではAlaxalaのスイッチに自動的にログインし、以下のコマンドを順番に実行します。これらのコマンドは管理者に昇格(enable)しなくても実行できます。管理者でしか実行できないコマンドをスクリプトで実行する例はまた別の機会に...(^^;;;

  1. set terminal pager disable
  2. show port
  3. show port vlan
  4. show vlan

実行時には引数でホスト名、もしくはIPアドレスを指定します。

./nw-command.pl <ホスト名>

スクリプト

nw-command.pl
#!/usr/bin/perl

use strict;
use Net::Telnet;

my $host = $ARGV[0];
my $user = 'myuser';
my $pass = 'mypassword';
my $prompt = '/>.*$/';
my $log = $host .".txt";

my @comm = (
        "set terminal pager disable",
        "show port",
        "show port vlan",
        "show vlan"
);

my $telnet = new Net::Telnet(
    Timeout => 10,
    Prompt => $prompt,
    Input_log => $log,
    );

$telnet->open($host);

$telnet->login($user, $pass);

my $result;
foreach my $line(@comm){
        $telnet->print($line);
        ($result) = $telnet->waitfor($prompt);
        print $result;
}

$telnet->print("quit");

$telnet->close;

実行例

実行結果は標準出力とログファイルに出力されます。

login: myuser
Password:

Copyright (c) 2005-2016 ALAXALA Networks Corporation. All rights reserved.

olexala> set terminal pager disable
olexala> show port
Date 2018/04/14 09:38:13 JST
Port Counts: 48
Port  Name           Status   Speed           Duplex     FCtl FrLen ChGr/Status
 0/ 1 geth0/1        up       1000BASE-T      full(auto) off   9234   -/-
 0/ 2 geth0/2        up       1000BASE-T      full(auto) off   9234   -/-
:
<中略>
:
 0/47 geth0/47       dis      -               -          -     -      -/-
 0/48 geth0/48       dis      -               -          -     -      -/-
olexala> show port vlan
Date 2018/04/14 09:38:13 JST
Port Counts: 48
Port  Name           Status Type        VLAN
 0/ 1 geth0/1        up     Access      100 (VLAN0100)
 0/ 2 geth0/2        up     Access      100 (VLAN0100)
:
<中略>
:
 0/47 geth0/47       dis    Access      111 (VLAN0111)
 0/48 geth0/48       dis    Access      111 (VLAN0111)
olexala> show vlan
Date 2018/04/14 09:38:14 JST
VLAN counts:4
VLAN ID:1     Type:Port based      Status:Disable
  Learning:On            Tag-Translation:
  BPDU Forwarding:       EAPOL Forwarding:
  Router Interface Name:VLAN0001
:
<中略>
:
  Description:VLAN0834
  Spanning Tree:
  AXRP RING ID:      AXRP VLAN group:
  GSRP ID:      GSRP VLAN group:
  IGMP snooping:     MLD snooping:
olexala>

NEC QXシリーズの場合

コマンドの記述部分を変えれば、基本的に動きます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1