Должна реализовать функционал классификации сетевых пакетов, для этого она должна проделать следующие действия:
- С помощью библиотеки libpcap (либо другой на выбор разработчика) прочитать пакеты из pcap файла. Необходимо классифицировать только IPv4 пакеты. Возможность захвата пакетов с сетевого интерфейса будет дополнительным преимуществом при оценивании.
- Выделить из них заголовки IP пакетов и заголовки TCP/UDP.
- Из выделенных заголовков прочитать IP адреса и порты.
- Каждый пакет классифицировать к потоку (совокупности пакетов от IP адреса №1 до IP адреса №2 с уникальной комбинацией портов).
- В каждом потоке посчитать количество пакетов и количество переданных байт.
- После завершения чтения всех пакетов информацию о всех выделенных потоках необходимо записать в CSV файл. Формат CSV файла:
<IP адрес источника>,<IP адрес получателя>,<порт источника>,<порт получателя>,<кол-во пакетов>,<кол-во байт>
Примечания:
- Для сборки программа не должна требовать настроек системы или нахождения определенных файлов в специфичном месте.
- Исходный код программы на С++ должен компилироваться средствами cmake или make с использованием gcc/g++ для работы в среде Linux. В папке с исходным кодом не должно быть мусора: неиспользуемых файлов исходных кодов или ресурсов, промежуточных файлов сборки и т.д.
- Код на С++ должен быть выполнен в ООП стиле.
Прежде всего, нужно установить зависимости. Проект использует библиотеку Pcap++, которая требует libpcap-dev
. Для установки можно выполнить команду:
sudo apt-get install libpcap-dev
Для сборки проекта используется CMake. Для выполнения сборки достаточно выполнить следующие команды:
cd cpp-packet-classifier
cmake -S . -B build
cmake --build build
Скомпилированная утилита лежит в папке build
. Для ее запуска достаточно выполнить:
cd build
./packet-classifier
Утилита работает в двух основных режимах:
- Режим чтения пакетов из .pcap файла
- Режим захвата пакетов с сетевого интерфейса
./packet-classifier file -i <input_file.pcap> -o <output_file.csv>
-i, --input
- входной файл .pcap-o, --output
- выходной файл .csv
./packet-classifier live -i <input_interface> -o <output_file.csv>
-i, --input
- сетевой интерфейс-o, --output
- выходной файл .csv
./packet-classifier live -i eth0 -o output.csv
./packet-classifier live list
Эта команда выводит список всех доступных сетевых интерфейсов.
Запускается после завершения работы первой программы комплекса и должна выполнить постобработку полученных статистических сведений, для этого необходимо выполнять следующие действия:
- Прочитать CSV файл, сгенерированный Программой №1.
- Для каждого, представленного в файле IP адреса подсчитать кол-во принятых и переданных байт и пакетов.
- Полученные данные записать в CSV файл. Формат:
<IP адрес>,<кол-во принятых пакетов>,<кол-во принятых байт>,<кол-во переданных пакетов>,<кол-в переданных байт>
Для управления зависимостями используется Poetry. Для установки зависимостей достаточно выполнить следующие команды:
cd py-stats-processor
poetry install
Для запуска утилиты достаточно выполнить:
poetry run python App.py
Утилита принимает на вход всего 2 аргумента:
-i, --input
- входной файл .csv-o, --output
- выходной файл .csv
python script_name.py -i <input_file.csv> -o <output_file.csv>