Форум программистов, компьютерный форум, киберфорум
Наши страницы
Dmitriy_M
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Тестируем сетевые программы. Пишем заглушку для Telnet/CLI.

Запись от Dmitriy_M размещена 04.10.2014 в 15:49

Сейчас работаю на контору, которая занимается мониторингом сетей передачи данных и сетевого оборудования.
Одному из студентов на полставки было получено разработать компонент, получающий характеристики с одного устройства по CLI(Command-line interface) через Telnet. Все вроде как шло хорошо, пока не дошло дело до тестирования.

Студенту сразу же захотелось протестировать свой код на боевом сервере, видите ли ему нужна реальная железка. Естественно он был послан в песочницу, где он должен сделать заглушку.

Естественно я не могу требовать от других то, что не могу сделать сам. Привожу пример такой заглушки без всяких сокетов!
Будем использовать мощь UNIX-way в GNU/Linux.

Есть такой крутой man Daniel J. Bernstein, который помимо всего прочего написал пакет ucspi-tcp, это набор утилит с интерфейсом командной строки, для разработки клиент-серверных приложений.

Чувствуете мощь *nix систем ? Клиент-серверное приложение на bash'e !

Будем использовать программу tcpserver, вот так выглядит её интерфейс:
Bash
1
tcpserver opts host port prog
opts опции запуска;
host хост на котором будет висеть сервер;
port порт на котором будет висеть сервер;
prog наш скрипт или программа.

Как это все работает? tcpserver вешается на выбранный хост и порт, и начинает принимать входящие соединения. Когда кто-то к нему подключается, то он переключает дескриптор сокета на дескриптор 0 для чтения, и дескриптор 1 для записи и запускает программу prog. Для тех, кто не в курсе:
0 - это дескриптор стандартного входа(stdin);
1 - это дескриптор стандартного выхода(stdout).

Нам остается только лишь написать скрипт/программу которая читает строку их stdin, в зависимости от команды генерируем ответ в том виде, в каком отвечает железяка.

В качестве примера привожу простой скрипт на Perl, считывает команду, если это quit, то выходим, иначе запускает команду и выводим результат на экран:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
 
use 5.010;
 
$|=1;
 
while(<>)
{
    chomp;
    if(/quit/)
    {
        say "bye";
        exit(0);
    }
    
    print `$_`;
}
Запуск сервера
Bash
1
tcpserver localhost 23023 ./cli.pl
Проверяем, подключаемся по telnet и получаем информацию о процессоре:
Bash
1
2
3
4
5
$ telnet localhost 23023 
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
cat /proc/cpuinfo
Размещено в Без категории
Просмотров 604 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru