Cisco機器のIOSからpingを継続的に打つ
Cisco機器のIOSから継続的にpingを打つことはできない。拡張pingを使った場合は、pingが正常に通じるなら一瞬で終わってしまうし、pingが通じないならCtrl+Cが効かないままエラーとなるpingを打ち続ける。そこでperlを使って1秒ごとにpingを打つプログラムを作った。こんな感じで動く。
$ perl ping_cont.pl Fail ICMP Echos to 192.168.1.1 Fail ICMP Echos to 192.168.1.1 Fail ICMP Echos to 192.168.1.1 Fail ICMP Echos to 192.168.1.1 Success ICMP Echos to 192.168.1.1 min/avg/max = 1/1/1 ms Success ICMP Echos to 192.168.1.1 min/avg/max = 1/1/1 ms Success ICMP Echos to 192.168.1.1 min/avg/max = 1/1/1 ms ^C
このプログラムにはCPANモジュールのNet::Telnet::Ciscoが必要になるので、あらかじめインストールしておく。
#!/opt/perl/bin/perl use strict; use warnings; use Net::Telnet::Cisco; my $cisco = Net::Telnet::Cisco->new( Host => '192.168.1.2', Timeout => 4, ErrMode => 'die' ); $cisco->login( Password => 'password' ); $cisco->enable('enable'); # これがないとCtrl+Cを検知できない。 $SIG{INT} = sub { $cisco->disable; $cisco->close; print '^C' . "\n"; exit 0; }; my $count = 0; my @ping; my $protocol = ''; my $ipaddr = '192.168.1.2'; my $repeat = 1; my $datagram = ''; my $timeout = 2; my $extended = ''; my $sweep = ''; # Ctrl+Cを押さなくても100回で終わる while ($count < 100) { @ping = $cisco->cmd( "ping $protocol $ipaddr $repeat $datagram $timeout $extended $sweep "); # pingの結果に「Success rate is 100 percent」の文字列が含まれていたら成功 my $success = grep(/^Success rate is 100 percent/, @ping); # pingの結果から10行目を取得する my $mam = $ping[10]; if ($success) { # pingの結果の10行目から「min/avg/max」の部分を取得する $mam =~ s/.*round-trip//; print 'Success '; } else { $mam = "\n"; print 'Fail '; } print "ICMP Echos to $ipaddr $mam"; sleep 1; $count++; @ping = (); } $cisco->disable; $cisco->close; exit 0;