Целью задания является разработка ПО для анализа информации о трафике, прошедшим через некое сетевое устройство. Все хосты-участники считаются наблюдаемым сегментом сети.
Информация находятся в файле traf.txt. Каждая строка содержит одну запись о сессии передачи данных между двумя узлами наблюдаемого сегмента сети. Поля в строке отделены символом ';'.
- IP:Port узла с которого отправлены данные
- MAC хоста с которого отправлены данные
- IP:Port узла на который отправлены данные
- MAC хоста на который отправлены данные
- Признак UDP: 'true' - UDP, 'false' - TCP
- Размер переданных данных, байт (целое)
- Время передачи, секунд (с плавающей точкой, разделитель десятичных -
.
)
Пример записи (одна строка):
94.239.149.85:46889;eF:Eb:4e:8:A3:08;161.223.117.183:7306;Ce:62:c5:00:BE:cd;false;10707;0.0941
Разработайте ПО котрое проанализирует информацию в файле и ответит на следующие вопросы, в отношении наблюдаемого сегмента сети:
- Q1. Сколько уникальных узлов в наблюдаемой сети (штук)?
- Q2. Какова средняя скорость передачи данных всей наблюдаемой сети (байт/сек)?
- Q3. Основываясь на данных о трафике, верно-ли утверждение "UDP используется для передачи данных с максимальной пиковой скоростью"?
- Q4. Укажите 10 узлов сети с самой высокой средней скоростью передачи данных (байт/сек).
- Q5. Укажите 10 самых активных подсетей /24 (A.B.C.xxx) по критерию количества сессий передачи данных (штук).
- Q6. Есть-ли в сети узлы, которые могут являться посредниками (т.н. PROXY) между другими узлами? Укажите их, если они есть. Узел может считаться PROXY если он принимал и передавал данные как минимум двум другим узлам по одному и тому-же протоколу, каждому, т.е., например узлу 1 передавал и принимал по TCP, а узлу 2 по UDP. Прием по одному протоколу, а отправка по другому, одному и тому-же узлу, не допускается в работе PROXY. Пример: узел А и передавал и принимал данные от узла В по одному и тому-же протоколу (UDP или TCP). Также узал А и передавал и принимал данные от узла С по одному и тому-же протоколу (UDP или TCP), но протоколы коммуникации А<->В и A<->C могли и не совпадать. Т.о. можно сказать что узел A, возможно, был посредником (PROXY) в передаче данных между узлами В и С.
Записи с некорректными данными нужно не учитывать в расчетах.
Результат должен содержать следующие артефакты:
- Исходный код, который был создан для выполнения задания и дающий ответ на вопросы задания, путем вывода на экран
- Инструкция по запуску исходного кода + перечень необходимых программных компонент для его запуска
- В случае использования платформы с компилируемым языком высокого уровня (С/C++/C#/golang/Java и т.п.) требуется приложить скопмилированный исполняемый файл или файл промежуточного представления (Java class/jar и т.п.)
- Нельзя использовать готовое ПО для анализа данных, СУБД и т.п., т.е. все расчеты должны быть выполнены самописным кодом, который явно показывает алгоритмы и структуры данных котоыре использовались
- Можно использовать любые программные инструменты разработки (языки, библиотеки, IDE и т.п.), разрабатывать на любой платформе
- Ориентировочное предполагаемое время на выполнение задания - 40-60 минут. Пожалуйста обратите внимание на слово "ориентировочное". Обычно это не должно занимать дольше, но ограничений - нет
- Данное задание не является обязательным к прохождению, однако позволяет более точно определить квалификацию специалиста, что положительно влияет на оценку профессиональных навыков
- Не располагайте результат Вашей работы на публично-доступных сервисах (например не fork-айте на GitHub)