#!/usr/bin/perl -w # Скрипт считывает счетчики входных и выходных байтов каждого порта свича # CompozitNetCNS7-MT и выводит попарно в 8 строк на стандартный вывод. # Если запускали с консоли, то выведет на экран. # Аналогично можно опросить и другие параметры, например флаги активности # портов и температуру свича. # Скрипт запускается каждые 5 минут для предотвращения переполнения # счетчиков. При считывании счетчики обнуляются. # Опрос всех счетчиков сделан в течение одной телнет сессии # Запускать скрипт из из командной строки приблизительно так: # perl CompozitNetCNS7-MT.pl 192.168.2.55 pinger # Первый параметр - имя или IP адрес свича, второй параметр - пароль. # Требуется использование модуля работы по телнет протоколу. # Если он еще не установлен, то скачать по ссылке ниже и установить. # http://search.cpan.org/CPAN/authors/id/J/JR/JROGERS/Net-Telnet-3.03.tar.gz # Под виндой можно скачать из репозитория штатным Perl Package Manager (PPM). use Net::Telnet(); # Считать параметры из командной строки. ($host, $password) = @ARGV; # Создать новый телнет объект, в качестве подсказки будет использован знак >. $t = new Net::Telnet(Prompt => '/>$/'); # Открыть телнет сессию с заданным хостом на стандартный порт 23. $t->open(Host => $host); # Дождаться приглашения ввести пароль. Все что было принято до этого - игнорировать. $t->waitfor(String => 'password:'); # Дождались приглашение, вести пароль. $t->cmd($password); select(undef, undef, undef, 0.1); # Задержка 0.1 сек. # Пароль введен, стандартное приглашение для ввода команды получено. # Последовательно опросить счетчики всех восьми портов. for($port = 1; $port <= 8; $port++) { # Ввести команду чтения счетчика входных байтов заданного порта. # Дождаться ответа в виде трех строк и запомнить их в рабочем массиве. # Нулевая и вторая строка - пустые, выбрать только нужное значение из первой строки. $BytesRecevied = ($t->cmd(String => "swg rpbc.$port"))[1]; select(undef, undef, undef, 0.1); # Задержка 0.1 сек. # Требуемое значение считано, убрать из его конца символ перевода строки. chomp $BytesRecevied; # Аналогично опросить счетчик переданных байтов. $BytesTransmitted = ($t->cmd(String => "swg tpbc.$port"))[1]; select(undef, undef, undef, 0.1); # Задержка 0.1 сек. chomp $BytesTransmitted; # Вывести считанные данные. print "$BytesRecevied $BytesTransmitted\n"; } # Все счетчики считаны и выведены. # Ввести команду quit и не дожидаться уже ответа. # Программист из Композита, который прошивку свича делал, рекомендовал # не подавать команду quit, а сразу закрывать сессию. То есть рекомендовал # две следующие строки из скрипта убрать. Но, поскольку работает и так, а # эксперементировать времени не было, то оставил как есть. $t->put(String => "quit\n"); select(undef, undef, undef, 0.1); # Задержка 0.1 сек. # Закрыть телнет сессию. $t->close; # Все. exit(0);