Реализация Telnet-клиента в прикладной программе для удаленного управления телекоммуникационным оборудованием от разных производителей::Журнал СА 11.2018
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Электронный документооборот  

5 способов повысить безопасность электронной подписи

Область применения технологий электронной подписи с каждым годом расширяется. Все больше задач

 Читать далее...

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9943
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8154
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8259
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5226
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5911
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Реализация Telnet-клиента в прикладной программе для удаленного управления телекоммуникационным оборудованием от разных производителей

Архив номеров / 2018 / Выпуск №11 (192) / Реализация Telnet-клиента в прикладной программе для удаленного управления телекоммуникационным оборудованием от разных производителей

Рубрика: Наука и технологии

Без фото МУЛЛАБАЕВ В.Н., канд. техн. наук, доцен кафедры программного обеспечения, Орский гуманитарно-технологический институт, (филиал) федерального государственного бюджетного образовательного учреждения высшего образования «Оренбургский государственный унивеситет», г. Орск, Оренбургская обл., пр. Мира, 15а, mvn_mvn@mail.ru

Реализация Telnet-клиента в прикладной программе
для удаленного управления телекоммуникационным оборудованием от разных производителей

Разработана программа подключения к удаленному телекоммуникационному оборудованию различного типа по протоколу Telnet из пользовательского приложения. Приведены примеры программных кодов на языке Perl и их описание приподключении к различному оборудованию

Несмотря на известные недостатки, протокол Telnet широко используется, например, для тестирования сети и баз данных, проверки портов, а также для взаимодействия с различными IoT (Internet of Things) устройствами ителекомустройствами [12].

Большинство работ, использующих Telnet-протокол, посвящены разработке клиент-серверных программ для управления конкретным оборудованием или приложением [1, 2, 3, 4, 5]. Но часто требуется, чтобы одно приложение имело возможность для подключения к разным устройствам, работающим под управлением разных операционных систем.

Например, в телекоммуникационных компаниях эксплуатируется множество типов оборудования от разных производителей, в которых реализован Telnet-сервер.

Однотипные операции, например получение списка подключенных пользователей или информации об активных портах и т.д., на устройствах разного типа выполняются разными командами. Поскольку интерфейс командной строки CLI (Command Line Interface) удаленного устройства является программой, спроектированной в расчете на общение с человеком, то при программном подключении к интерфейсу CLI необходимо учесть возможность установления предельного времени ожидания (тайм-аут) и ожидания приглашения командной строки [13]. Также необходимо учитывать то, что интерфейсы CLI сильно отличаются в устройствах от разных производителей.

В предлагаемой работе рассмотрены примеры клиентских программ, использующих протокол Telnet при доступе к серверному компьютеру, работающему под операционной системой UNIX, маршрутизатору Cisco с операционной системой Cisco IOS и ADSL-коммутатору (Asymmetric Digital Subscriber Line) Huawei с операционной системой VRP.

На языке программирования Perl [11] протокол Telnet реализован в модуле Net::Telnet, доступном с https://metacpan.org/pod/Net::Telnet [9].

Пример подключения к удаленному компьютеру, работающему под операционной системой UNIX

После подачи на удаленную машину требуемой команды операционной системы полученный результат должен распечататься на экране локального компьютера. Программный код следующий:

use Net::Telnet;
my $remotehost=$ARGV[0] ;
my $username=$ARGV[1];
my $passwd=$ARGV[2];
my $cmd=$ARGV[3];
my $telnet = new Net::Telnet (Timeout => 10, Prompt => '/[\$%#>] $/');
$telnet->open("$remotehost");
$telnet->login($username, $passwd);
@lines = $telnet->cmd("$cmd");
print @lines;

Первая строка use Net::Telnet подключает модуль Net::Telnet, обеспечивающий объектно-ориентированный интерфейс к протоколу Telnet.

Далее из аргументов командной строки программы в переменные $remotehost$username$passwd и $cmd получаем имя или IP-адрес удаленного хоста, имя и пароль пользователя на удаленном хосте и полное название команды, которую необходимо выполнить на удаленнм хосте.

Строка $telnet = new Net::Telnet создает новый объект – интерфейс к протоколу Telnet. Здесь имеется множество параметров. В примере указаны только два:

  • Timeout => 10 – время ожидания ответа от удаленного хоста 10 с,
  • Prompt => '/[\$%#>] $/' – шаблон приглашения командной строки, ожидаемое после установки соединения в виде регулярного выражения. Ожидаются любые символы, заканчивающиеся одним из символов $ или % или # или >.

Строка $telnet->open("$remotehost") устанавливает Telnet-соединение между локальным компьютером и удаленным компьютером, т.е. подключается к 23-му порту удаленного хоста.

Строка $telnet->login($username, $passwd) использует метод login для передачи на удаленный хост имени (переменная $username) и пароля (переменная $passwd). Удаленный хост производит проверку правильности имени и пароля. Программа распознает удачный вход по получении приглашения командной строки, совпадающей с параметром Prompt, а неудачный – по истечении допустимого времени (параметр timeout).

Строка @lines = $telnet->cmd("$cmd") использует метод cmd для запуска команды на удаленном хосте. Ответ с результатом выполнения команды записывается в массив @lines. Для удачного завершения данный метод ждет приглашение командной строки, совпадающей с параметром Prompt.

Строка print @lines распечатывает массив @lines на экране локального компьютера.

Если сохранить приведенный код в файле с названием p_comp.pl, а затем запустить его на локальном компьютере командой:

perl p_comp.pl server1 'имя' 'пароль' '/usr/bin/w'

то на экране получим ответ компьютера server1 на команду w, показывающий список пользователей, подключенных к серверу server1, и что они делают, подобный следующему:

10:13:59  up 2:28,  5 users,  load average: 0.00, 0.00, 0.00
USER  TTY    FROM   LOGIN@  IDLE   JCPU   PCPU   WHAT
alex  pts/1  comp1  10:19   0.00s  0.02s  0.01s  info date
max   pts/2  a03    10:20   0.00s  0.03s  0.04s  login – max
…

Параметр Prompt => '/[\$%#>] $/' подходит для большинства случаев приглашений командной строки UNIX-машин. Его необходимо настраивать, если на удаленном хосте используется нестандартный командный интерпретатор или приуправлении различным оборудованием. В телекоммуникационном оборудовании применяется двухступенчатая авторизация. Первая ступень предоставляет непривилегированный режим работы, как правило, для просмотра некритичных параметров, вторая ступень – привилегированный режим – для полного контроля над оборудованием. Для каждого режима имеются свои приглашения командной строки и свой набор команд.

Пример подключения к маршрутизатору Cisco

Для управления телекоммуникационным оборудованием фирмы Cisco можно воспользоваться готовым модулем Net::Telnet::Cisco [10], где все детали учтены, и настраивать ничего не надо.

 use Net::Telnet::Cisco;
 my $remotehost=$ARGV[0] ;
my $username=$ARGV[1];
my $passwd=$ARGV[2];
my $enable_passwd=$ARGV[3];
my $cmd=$ARGV[4];
  my $session = Net::Telnet::Cisco->new(Host => "$remotehost");
  $session->login($username, $passwd);
if ($session->enable($enable_passwd) ) {
      @output = $session->cmd("$cmd");
      print "Текущая конфигурация: @output\n";
  } else {
      warn "Невозможно перейти в режим enable : " . $session->errmsg;
  }
  $session->close;

Первая строка use Net::Telnet::Cisco подключает модуль Net::Telnet::Cisco, обеспечивающий объектно-ориентированный интерфейс к протоколу Telnet, учитывающий специфику оборудования фирмы Cisco.

Строки, получающие данные из аргументов командной строки, подобны предыдущему примеру. Добавлена строка получения пароля для перехода в привилегированный режим в переменную $enable_passwd.

Строка $telnet = new Net::Telnet::Cisco создает новый объект – интерфейс к протоколу Telnet с одновременным подключением к 23-му порту на удаленном хосте. То есть здесь не надо вызывать метод open. Указан только один параметр – имя удаленного хоста.

Остальные параметры, например такие, как Timeout и Prompt, имеют значения по умолчанию, принятые для оборудованияя фирмы Cisco.

Строка $session->login($username, $passwd) производит первую ступень авторизации и предоставляет доступ в непривилегированный режим. Получить информацию о конфигурации можно только в привилегированном режиме, куда можно перейти, используя метод enable, что выполнено в следующей строке $session->enable($enable_passwd).

При удачной авторизации второй ступени через метод cmd посылается команда операционной системе оборудования. Ответ с результатом выполнения команды помещается в массив @output и распечатывается на экране локального компьютера. Если авторизация перехода в привилегированный режим не прошла за определенное время, задаваемое параметром Timeout, выдается сообщение об ошибке.

Если сохранить приведенный код в файле с названием p_cisco.pl, а затем запустить его на локальном компьютере командой:

perl p_cisco.pl router1 'имя' 'пароль1' 'пароль2' 'show running-config'

то на экране получим ответ маршрутизатора router1 на команду show running-config, отображающую текущую конфигурацию маршрутизатора. Здесь в параметрах пароль1 и пароль2 указываются соответственно пароли для входа внепривилегированный и привилегированный режимы на удаленном хосте.

К сожалению, для большинства оборудования нет подобных готовых модулей, как для Cisco, или же имеются, но не вполне работоспособные. Тогда необходимо писать и настраивать процедуры с учетом тонкостей конкретной техники. Приотладке для детального изучения потока данных, принимаемых от удаленного хоста, полезно воспользоваться методами input_log() – входные данные из буфера протокола Telnet, переведенные в символьную форму, и dump_log() – входные данные в оригинальной шестнадцетиричной форме [9]. Эти методы записывают соответствующие им данные из буфера в регистрационный файл.

Пример подключения к ADSL-коммутатору Huawei MA5300

Здесь особенностью является то, что просмотр параметров текущей работы и подачу настроечных команд нужно производить в режиме конфигурирования. То есть после первоначальной авторизации необходимо перейти впривилегированный режим, а затем в режим конфигурирования, где в каждом случае приглашение командной строки меняется. Метод login, использовавшийся в предыдущих примерах, здесь не работает. Для авторизации можно воспользоваться методами waitfor и print.

use Net::Telnet;
 my $telnet = new Net::Telnet (Timeout=>10, Errmode=>'die', Prompt=>'/\w+(?=>)|\w+(?=#)/');
my $remotehost=$ARGV[0] ;
my $username=$ARGV[1];
my $passwd=$ARGV[2];
my $enable_passwd=$ARGV[3];
my $cmd=$ARGV[4];
$telnet->open("$remotehost");

############ Авторизация ##############
$telnet->waitfor('/\w+(?=:)/');
$telnet->print(“$username\n”);
$telnet->waitfor('/\w+(?=:)/');
$telnet->print(“$passwd\n");
$telnet->waitfor('/\w+(?=>)/');
$telnet->print("enable 15\n");
$telnet->waitfor('/\w+(?=:)/');
$telnet->print(“$enable_passwd \n");
$telnet->waitfor('/\w+(?=#)/');
$telnet->print("config t\n");
$telnet->waitfor('/\w+\)(?=#)/');

############ Посылка команды ############
$telnet->cmd_remove_mode(3);
$telnet->buffer_empty;
@chars = split(//, $cmd);
for($i=0; $i < @chars; $i++) {
	$telnet->put("$chars[$i]");
	sleep(1) if $chars[$i] eq '0';
	}
$telnet->put("\n");
while($a=$telnet->getline){
	last if ($a =~ /$cmd/);
}

########### Получение ответа ############
a: while($myl = $telnet->get(Timeout=>5)){
	if ($myl =~ //) { $telnet->print("\n"); }
        elsif ( $myl =~ /More/ ) { $telnet->print(" "); }
	elsif ($myl =~ /config\)#$/) {last a;}
	else { print("$myl"); }
    }

print "\n";
$telnet->close("$remotehost");

Строка $telnet = new Net::Telnet создает новый объект – интерфейс к протоколу Telnet. Здесь указаны следующие параметры.

  • Timeout => 10 – время ожидания ответа от удаленного хоста 10 с.
  • Параметр Errmode => 'die' установлен в значение die для получения кода ошибки при неправильной работе.
  • В Prompt возможные значения приглашения командной строки. Получение аргументов командной строки такие же, как и в предыдущем примере.

Строка $telnet->open("$remotehost") устанавливает Telnet-соединение между локальным компьютером и удаленным коммутатором.

В секции «Авторизация» приведены код авторизации, переход в привилегированный, а затем в конфигурационный режим работы.

Использованы методы waitfor() и print() для отделения потоков получаемых данных (результата) и передаваемых команд. Метод waitfor читает входной буфер, пока не будет найдена строка, совпадающая с задаваемым шаблоном. Метод printпечатает строку в открытый объект и возвращает не ноль, если все данные были успешно записаны.

В строке $telnet->waitfor('/\w+(?=:)/') указываем, что ожидаются любые символы, заканчивающиеся символом двоеточие, т.к. удаленный хост в зависимости от модификации и настроек может выдать любой набор символов, заканчивающийся двоеточием. Предполагается, что при первом вызове удаленный хост после двоеточия ожидает ввод имени пользователя.

В строке $telnet->print("$username\n") передается удаленному хосту имя авторизуемого пользователя.

В следующей паре waitfor и print передается пароль пользователя. В результате входим в непривилегированный режим работы на удаленном хосте, что распознается по появлению во входном буфере любого потока символов, заканчивающихся символом >.

Строка $telnet->print("enable 15\n") посылает запрос на переход в привилегированный режим работы.

В следующей паре waitfor и print передается пароль для перехода в привилегированный режим. Переход в нужный режим работы распознается по появлению во входном буфере любого потока символов, заканчивающихся символом #.

Далее в строке $telnet->print("config t\n") подается запрос на переход в режим конфигурирования. Здесь пароль вводить не надо. Получаем новое приглашение командной строки, которое заканчивается сиволом #.

В секции «Посылка команды» приведен код посылки команды на устройство и получения эхо-ответа с учетом особенностей данного оборудования. Оборудование Huawei в ответ на введенную команду вначале выдает служебную информацию с повтором полученной команды (эхо), далее выдает результат выполнения команды.

Метод cmd_remove_mode(3) задает, сколько начальных служебных строк удалять из входного потока данных.

Метод buffer_empty очищает входной буфер.

Особенностью оборудования Huawei является то, что, если в передаваемой команде имеется символ 0 (ноль), необходимо выдержать паузу, то есть полностью эмулировать ручной ввод с клавиатуры. Поэтому вместо метода print необходимо передавать команду посимвольно через метод put().

Строка @chars = split(//, $cmd) разбивает подаваемую команду на отдельные символы и помещает их в массив @chars. Далее в цикле for производится передача команды посимвольно на удаленный хост с выдержкой времени 1 с после передачи символа 0.

Заканчивается секция нахождением эхо-ответа введенной команды во входном потоке, означающего, что оборудование приступило к выполнению команды. Для нахождения эхо-ответа используется метод getline – чтение строки из входного буфера.

В секции «Получение ответа» приведен код получения информации о результате выполнения введенной команды с учетом особенностей данного оборудования.

Используется метод get() – блочное чтение входного буфера. Входной поток анализируется на наличие служебных слов: More – постраничный вывод результата, для перехода на следующую страницу необходимо передать код клавиши <Пробел><cr> – приглашение нажать клавишу <Enter> для завершения выдачи результата. По получении приглашения командной строки цикл чтения входного буфера завершается.

Выводы

Покзаны возможности применения протокола Telnet в пользовательском приложении для удаленного управления компьютерами, работающими под UNIX-подобными операционными системами и оборудованием фирмы Cisco, работающим под управлением операционной системы Cisco IOS. Решена проблема подключения по протоколу Telnet из пользовательского приложения к телекоммуникационному оборудованию фирмы Huawei, где учтены специфические особенности данного оборудования, работающего под управлением операционной системы VRP.

В целом модуль Net::Telnet дает мощный инструмент для автоматизации управления телекоммуникационными сетями, состоящими из оборудования от разных производителей. При наличии отлаженных процедур доступа можно разработать единый интерфейс, позволяющий абстрагироваться от конкретного оборудования и создать централизованное рабочее место для управления всеми элементами сети, которым могут воспользоваться и нетехнические специалисты. Например, менеджеры по продажам для оперативного подключения абонента после заключения договора на услуги интернета.

Обзор современных коммерческих продуктов по централизованному управлению большими гетерогенными сетями показывает, что в них используются практически все доступные протоколы управления и разные языки программирования для достижения поставленных целей. В качестве примера можно привести автоматизированные системы управления Cisco Works от компании Cisco Systems [6], HP Opsware от компании Hewlett-Packard [8], EMC Voyence от компании EMC [7].

  1. Белов И.В., Винокуров А.С., Баженов Р.И. Разработка программы удаленного управления компьютером на основе протокола Telnet. // Science Time, №10, 2014 г. – С. 39-43.
  2. Бородин А.В., Паршин Е.В. Архитектура программного обеспечения подсистемы мониторинга состояния серверов времени symmetricom серии TrueTime NTS-100. // «Современные тенденции развития науки и технологий», № 4-4,2016 г. – С. 14-16.
  3. Использование программы Telnet для проверки возможности подключения по протоколу POP3 в Microsoft Exchange 2007. [Электронный ресурс]. – Режим доступа: https://technet.microsoft.com/ru-ru/library/dd789740(v=exchg.80).aspx.
  4. Терентьев А.М. Возможность полуавтоматического управления сетевыми коммутаторами Cisco Catalyst // Развитие и использование средств сетевого мониторинга и аудита. Российская академия наук, Центральный экономико-математический институт. – М.: 2005. – С. 14-27.
  5. Фефелов А. Java: встраиваем сервер Telnet. // «Системный администратор», № 5, 2004 г. – С. 82-85. – Режим доступа: http://samag.ru/archive/article/287.
  6. API Reference for CiscoWorks Network Compliance Manager 1.7 [Электронный ресурс]. – Режим доступа: http://www.cisco.com/c/dam/en/us/td/docs/net_mgmt/ciscoworks_network_compliance_manager/1_7/api_guide/api_guide.pdf.
  7. EMC Smarts Network Configuration Manager [Электронный ресурс]. – Режим доступа: http://www.emc.com/collateral/TechnicalDocument/docu57481.pdf.
  8. HP Network Automation Software. – Режим доступа: https://softwaresupport.softwaregrp.com/web/softwaresupport/document/-/facetsearch/attachment/KM1166604?fileName=hp_man_NA9.0_UserGuide_p2_pdf.pdf.
  9. Net::Telnet Documentation [Электронный ресурс]. – Режим доступа: http://search.cpan.org/~jrogers/Net-Telnet-3.04/lib/Net/Telnet.pm.
  10. Net::Telnet::Cisco Documentation [Электронный ресурс]. – Режим доступа: http://search.cpan.org/~joshua/Net-Telnet-Cisco-1.10/Cisco.pm.
  11. Perl Programming Documentation [Электронный ресурс]. – Режим доступа: http://perldoc.perl.org/perl.html.
  12. Telnet: a client-server protocol for cross-platform remote connections [Электронный ресурс]. – Режим доступа: https://www.1and1.com/digitalguide/server/tools/telnet-the-system-wide-remote-protocol/.
  13. Using Perl to connect to remote hosts via telnet [Электронный ресурс]. – Режим доступа: http://www.perlfect.com/articles/telnet.shtml.

Ключевые слова: Telnet, CLI, маршрутизатор, ADSL-коммутатор.


Telnet-client implementation for the remote control of the telecommunication equipment from different manufacturers

Mullabaev V.N., Candidate of Engineering Sciences Orsk Humanitarian and Technological Institute (branch) of Federal State Budget Educational Institution of Higher Professional Education Orenburg State University, mvn_mvn@mail.ru

Abstract: The program for the remote connection to the management interfaces of equipment from different manufacturers via Telnet are developed. Examples of program codes in Perl and their descriptions when you connect to a different hardware were given.

Keywords: Telnet, CLI, router, ADSL-switch.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru