Задания к лабораторной работе по сетевому программированию
См. полезную информацию в конце страницы.
Требования к отчету по лабораторной работе приведены в самом конце страницы.
-
Разработать клиент-серверное приложение "Телеграф" для общения двух абонентов
на узлах сети Internet в полудуплексном режиме в текстовом формате. Абонент-сервер
стартует серверную часть приложения в режиме ожидания запроса от клиента.
Абонент-клиент, зная адрес абонента-сервера, инициирует связь с абонентом-сервером
и передает ему сообщение (в общем случае, многострочное). Завершая сообщение,
абонент-клиент передает абоненту-серверу код "Перехожу на прием". Получив
этот код, абонент-сервер передает абоненту-клиенту свое сообщенеи, завершая
его кодом "Перехожу на прием". Далее наступает очередь абонента-клиента
передавать сообщение. Тексты сообщений с обеих сторон вводятся пользователями-людьми
с устройства стандартного ввода. Тщательно проработать протокол взаимодействия,
предусмотрев механизм прекращения диалога.
-
Разработать клиент-серверное приложение копирования файла (или поддерева
файловой системы) с узла-клиента на узел-сервер в указанный каталог (аналог
стандартной UNIX-команды rcp). Команда, выполняемая на стороне клиента,
имеет следующий вид: cprem path.to.src.file host@path.to.dst.dir .
Замечание. Для передачи поддерева файловой системы (или одного файла) рекомендуется
на стороне клиента использовать вызов (через fork) команды tar с перенаправлением
ее вывода непосредственно в сокет. На стороне сервера также рекомендуется
использовать tar с перенаправлением ее ввода непосредственно из сокет.
-
Разработать клиент-серверное приложение копирования файла (или поддерева
файловой системы) с узла-сервера на узел-клиент в указанный каталог (аналог
стандартной UNIX-команды rcp). Команда, выполняемая на стороне клиента,
имеет следующий вид: remcp host@path.to.src.file path.to.dst.dir.
См. замечание к предыдущему заданию.
-
Разработать клиент-серверное приложение выполнения на узле-сервере shell-команды,
задаваемой пользователем на узле-клиенте (аналог стандартной UNIX-команды
rsh). Команда, выполняемая на стороне клиента, имеет следующий вид: remcmd
host command. Не забыть обеспечить вывод удаленной команды вернуть клиенту
(учесть, что этот вывод может быть очень объемным).
-
Разработать клиент-серверное приложение "Морской бой". Играют двое пользователей-людей,
обмениваясь стандартными фразами: "а7", "мимо", "ранил", "убил". Подобный
протокол взаимодействия (но на формальном уровне) должно реализовывать
сетевое приложение в режиме клиент-сервер (серверная сторона ожидает первого
хода в ее сторону). Диалог игроков-людей должен вестись в единой кодировке
(латиница или кириллица).
-
Разработать "чрезвычайно упрощенный клиент" протокола http. Программа-"браузер"
принимает в качестве аргумента командной строки URL-адрес web-сервера,
обращается по прикладному протоколу http к серверу, получает содержимое
страницы и выводит его в текстовом виде на стандартный вывод. Кроме того
выводятся в виде списка все ссылки, имеющиеся на странице. Пользователь-человек
имеет возможность указать номер ссылки и заставить "браузер" обратиться
по ней. Программа должна уметь работать со страницами "неограниченного" объема.
Для поиска в тексте страницы ссылок рекомендуется использовать
пару функций regcmp и regex.
 
-
Разработать программу-"отправитель" электрической почты (в текстовом формате)
по протоколу SMTP. Программа должна выступать в качестве минимального аналога
UNIX-утилиты mail <адресат>, текст сообщения должен считываться со стандартного
ввода. Требуемые возможности протокола SMTP можно изучить, проанализировав
журнал работы команды mailx -v <адресат>.
 
-
Разработать программу-"получатель" электрической почты по протоколу POP-3
из почтового ящика на POP3-сервере. Программа должна обеспечивать минимальную
функциональность UNIX-утилиты mail (без аргументов). Описание протокола
POP-3 можно найти в Internet (например, www.citforum.ru), другой путь -
использование сканеров сети типа tcpdump или snoop.
-
Разработать программу, обеспечивающую разрешение доменного имени
(напр., rk6.bmstu.ru) в IP-адрес путем обращения по протоколу DNS (UDP, порт
53) к указываемому DNS-серверу. Полнофункциональным прототипом
разрабатываемой программы может служить утилита nslookup (или dig).
Предусмотреть обработку двух типов ответа сервера - А и CNAME.
-
Разработать программу "мини-ftp-клиент", обеспечивающую получение файла
(команда get) с удаленного ftp-сервера в пассивном режиме.
-
Разработать программу "мини-ftp-клиент", обеспечивающую получение файла
(команда get) с удаленного ftp-сервера в активном режиме.
-
Разработать программу "мини-ftp-клиент", обеспечивающую передачу файла
(команда put) на удаленный ftp-сервер в пассивном режиме.
-
Разработать программу "мини-ftp-клиент", обеспечивающую передачу файла
(команда put) на удаленный ftp-сервер в активном режиме.
-
Разработать программу, обеспечивающую посылку и прием SNMP-сообщений.
Полнофункциональным прототипом разрабатываемой программы может служить утилита
snmpget.
Ввод-вывод программы - в виде строк шестнадцатиричных цифр. Знакомство с
форматом сообщений протокола SNMP можно начать
здесь.
-
Разработать сетевой вариант программы моделирования лифтовой системы (см.
задание 8 из лаб. работы 1). При этом процессы для БН, ЛП и ЛГ выполняются на
отдельных узлах сети (при этом "нажатие" кнопок должно
осуществляться на клавиатурах соответствующих узлов).
-
Разработать программу-клиент протокола SNTP (Simple Network Time Protocol,
краткое описание - http://book.itep.ru/4/44/sntp4416.htm),
обеспечивающую печать значения точного времени (и значений других
"интересных" полей пакета протокола), полученного от NTP-сервера.
Полезными для отладки сетевых программ являются утилиты ifconfig, netstat,
tcpdump, telnet, ssh и sftp.
Команда ifconfig предназначена для конфигурирования сетевых интерфейсов, её
полный функционал доступен только суперпользователю root. Однако, в виде
"/sbin/ifconfig -a" она позволяет любому пользователю получить
информацию о конфигурации всех интерфейсов (в частности, узнать IP-адрес).
Команда netstat позволяет получить разнообразную информацию о
функционировании сетевых механизмов на локальной машине. В простейшем виде
"netstat -a" она выводит состояния всех открытых сетевых портов.
Команда tcpdump позволяет "снюхать" трафик с
указанного сетевого интерфейса, отфильтровать его и представить с
необходимой степенью детализации. Доступна для выполнения только суперпользователю
root.
Команда telnet host [port] даёт возможность
подключиться по протоколу TCP к порту с номером port на узле с
именем/адресом host и осуществить с ним прозрачный обмен текстовыми
данными согласно прикладному протоколу.
Команда ssh user@host организует защищенную терминальную
сессию с узлом host для пользователя user.
Команда sftp user@host организует защищенный обмен
файлами с узлом host для пользователя user (аналог команды ftp).