Задания к лабораторной работе по сетевому программированию

См. полезную информацию в конце страницы.
Требования к отчету по лабораторной работе приведены в самом конце страницы.
  1. Разработать клиент-серверное приложение "Телеграф" для общения двух абонентов на узлах сети Internet в полудуплексном режиме в текстовом формате. Абонент-сервер стартует серверную часть приложения в режиме ожидания запроса от клиента. Абонент-клиент, зная адрес абонента-сервера, инициирует связь с абонентом-сервером и передает ему сообщение (в общем случае, многострочное). Завершая сообщение, абонент-клиент передает абоненту-серверу код "Перехожу на прием". Получив этот код, абонент-сервер передает абоненту-клиенту свое сообщенеи, завершая его кодом "Перехожу на прием". Далее наступает очередь абонента-клиента передавать сообщение. Тексты сообщений с обеих сторон вводятся пользователями-людьми с устройства стандартного ввода. Тщательно проработать протокол взаимодействия, предусмотрев механизм прекращения диалога.
  2.  
  3. Разработать клиент-серверное приложение копирования файла (или поддерева файловой системы) с узла-клиента на узел-сервер в указанный каталог (аналог стандартной UNIX-команды rcp). Команда, выполняемая на стороне клиента, имеет следующий вид: cprem path.to.src.file host@path.to.dst.dir .
  4. Замечание. Для передачи поддерева файловой системы (или одного файла) рекомендуется на стороне клиента использовать вызов (через fork) команды tar с перенаправлением ее вывода непосредственно в сокет. На стороне сервера также рекомендуется использовать tar с перенаправлением ее ввода непосредственно из сокет.
     
  5. Разработать клиент-серверное приложение копирования файла (или поддерева файловой системы) с узла-сервера на узел-клиент в указанный каталог (аналог стандартной UNIX-команды rcp). Команда, выполняемая на стороне клиента, имеет следующий вид: remcp host@path.to.src.file path.to.dst.dir.
  6. См. замечание к предыдущему заданию.
     
  7. Разработать клиент-серверное приложение выполнения на узле-сервере shell-команды, задаваемой пользователем на узле-клиенте (аналог стандартной UNIX-команды rsh). Команда, выполняемая на стороне клиента, имеет следующий вид: remcmd host command. Не забыть обеспечить вывод удаленной команды вернуть клиенту (учесть, что этот вывод может быть очень объемным).
  8.  
  9. Разработать клиент-серверное приложение "Морской бой". Играют двое пользователей-людей, обмениваясь стандартными фразами: "а7", "мимо", "ранил", "убил". Подобный протокол взаимодействия (но на формальном уровне) должно реализовывать сетевое приложение в режиме клиент-сервер (серверная сторона ожидает первого хода в ее сторону). Диалог игроков-людей должен вестись в единой кодировке (латиница или кириллица).
  10.  
  11. Разработать "чрезвычайно упрощенный клиент" протокола http. Программа-"браузер" принимает в качестве аргумента командной строки URL-адрес web-сервера, обращается по прикладному протоколу http к серверу, получает содержимое страницы и выводит его в текстовом виде на стандартный вывод. Кроме того выводятся в виде списка все ссылки, имеющиеся на странице. Пользователь-человек имеет возможность указать номер ссылки и заставить "браузер" обратиться по ней. Программа должна уметь работать со страницами "неограниченного" объема. Для поиска в тексте страницы ссылок рекомендуется использовать пару функций regcmp и regex.
  12.  
  13. Разработать программу-"отправитель" электрической почты (в текстовом формате) по протоколу SMTP. Программа должна выступать в качестве минимального аналога UNIX-утилиты mail <адресат>, текст сообщения должен считываться со стандартного ввода. Требуемые возможности протокола SMTP можно изучить, проанализировав журнал работы команды mailx -v <адресат>.
  14.  
  15. Разработать программу-"получатель" электрической почты по протоколу POP-3 из почтового ящика на POP3-сервере. Программа должна обеспечивать минимальную функциональность UNIX-утилиты mail (без аргументов). Описание протокола POP-3 можно найти в Internet (например, www.citforum.ru), другой путь - использование сканеров сети типа tcpdump или snoop.
  16.  
  17. Разработать программу, обеспечивающую разрешение доменного имени (напр., rk6.bmstu.ru) в IP-адрес путем обращения по протоколу DNS (UDP, порт 53) к указываемому DNS-серверу. Полнофункциональным прототипом разрабатываемой программы может служить утилита nslookup (или dig). Предусмотреть обработку двух типов ответа сервера - А и CNAME.
  18.  
  19. Разработать программу "мини-ftp-клиент", обеспечивающую получение файла (команда get) с удаленного ftp-сервера в пассивном режиме.
  20.  
  21. Разработать программу "мини-ftp-клиент", обеспечивающую получение файла (команда get) с удаленного ftp-сервера в активном режиме.
  22.  
  23. Разработать программу "мини-ftp-клиент", обеспечивающую передачу файла (команда put) на удаленный ftp-сервер в пассивном режиме.
  24.  
  25. Разработать программу "мини-ftp-клиент", обеспечивающую передачу файла (команда put) на удаленный ftp-сервер в активном режиме.
  26.  
  27. Разработать программу, обеспечивающую посылку и прием SNMP-сообщений. Полнофункциональным прототипом разрабатываемой программы может служить утилита snmpget. Ввод-вывод программы - в виде строк шестнадцатиричных цифр. Знакомство с форматом сообщений протокола SNMP можно начать здесь.
  28.  
  29. Разработать сетевой вариант программы моделирования лифтовой системы (см. задание 8 из лаб. работы 1). При этом процессы для БН, ЛП и ЛГ выполняются на отдельных узлах сети (при этом "нажатие" кнопок должно осуществляться на клавиатурах соответствующих узлов).
  30.  
  31. Разработать программу-клиент протокола 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).

Содержание отчета