Сети-2 2014-2015

Задачи курса

tracert-as
Написать скрипт, который выводит маршрут (traceroute) и номера автономных систем промежуточных узлов, используя ответы службы whois региональных регистраторов.
Вход: один или более IP-адресов, разделенных пробелами
Выход:
[1-3 балла] для каждого IP-адреса – вывести результат трассировки (в пределах разумного TTL), для "белых" IP-адресов из него указать номер автономной системы и название сети,
[4-6 балла] то же, плюс обращение к правильному whois-серверу и определение страны промежуточного IP,
[7-10 баллов] то же, плюс самостоятельная реализация traceroute (сборка пакета с нужным TTL и разбор ICMP)

sntp
Написать "обманывающий" сервер времени
Вход: передается количество секунд (+ или -) смещения относительно точного времени
Выход:
[1-4 балла] ответить на корректные запросы по протоколу SNTP корректными ответами (поля: LI, VN, Mode, Stratum и время должны быть заполнены осмысленным образом)
[5-7 баллов] то же, плюс многопоточность

portscan
Написать сканер TCP- и UDP-портов удалённого компьютера.
Вход: адрес хоста и диапазон портов
Выход: итоговая оценка складывается как сумма:
[1-4 балла] список открытых TCP-портов,
[1-4 балла] список открытых UDP-портов,
[1-3 балла] многопоточность,
[1-4 балла] распознать прикладной протокол по сигнатуре (NTP/DNS/SMTP/POP3/HTTP).

dns-cache
Написать кеширующий DNS-сервер, слушающий 53 порт и отвечающий на корректные запросы по протоколу DNS (RFC 1035) корректными ответами, данные сервер должен брать из своего кэша или переспрашивать у указанного сервера (см. BIND forwarders).
Вход: адрес (символьное или IP) dns-сервера.
Выход:
[1-7] реализация кэша на основе query records в качестве ключа.
[8-15] парсинг пакета для помещения в кэш записей из секций AN, NS, AR. Самостоятельная сборка пакета с ответом.
[16-20] обработка зацикливания (корректное поведение сервера в случае, если в качестве «старшего сервера» указан он же сам, или экземпляр его, запущенный на другой машине)

Обязательно должно быть реализовано
* устаревание данных в кэше (обработка TTL),
* временный отказ вышестоящего сервера (сервер не должен терять работоспособность (уходить в бесконечное ожидание, падать с ошибкой и т.д.), если старший сервер почему-то не ответил на запрос к нему)

dns-poison
Написать скрипт, принимающий три параметра - адрес DNS-сервера, символьное имя, значение IP-адреса для символьного имени.
Скрипт должен занести в кеш указанного (заранее подготовленного вами) сервера заданные значения, отличающиеся от настоящих.

smtp-mime
Написать скрипт, который отправляет получателю все картинки из указанного (или рабочего) каталога в качестве вложения.
Вход: email получателя, адрес сервера SMTP, реквизиты авторизации (если требуются)
Выход: итоговая оценка складывается как сумма
[1-3 балла] формирование письма в соответствии с MIME,
[1-3 балла] работа с SMTP-сервером с авторизацией и без,
[1-2 балла] работа по защищенному соединению (+starttls),
[1-2 балла] использование ESMTP (напр., pipelining, 8bitmime, size).
Рекомендуется вывод в stderr протокола работы с указанием ответов сервера и посылаемых команд (кроме текста письма)
Обязательна обработка ответов сервера, в том числе многострочных.

pop3
Написать скрипт, выводящий информацию о письмах в почтовом ящике
Вход: адрес pop3-сервера, реквизиты авторизации, по желанию - диапазон номеров писем.
Выход: итоговая оценка складывается как сумма
[1-3 балла] вывод заголовков писем как списка или таблицы с полями "кому, от кого, тема, дата, размер письма",
[1-3 балла] декодирование заголовков From/Subject,
[1-2 балла] работа по защищенному соединению,
[1-2 балла] вывод количества аттачей, имен файлов и размеров.
Обязательна обработка ответов сервера, в том числе многострочных.

http-api
майнинг данных через HTTP
Примерный список API и задач: https://www.dropbox.com/s/4bbcxxvvblyijua/api.txt

http-proxy
Написать скрипт, работающий как HTTP-прокси
Требования - чуть позже

(Activity)
Техническая запись для вычисления общего балла

(Quest)