traffic-v2 icon indicating copy to clipboard operation
traffic-v2 copied to clipboard

Классификатор трафика на основе количественных характеристик потока транспортного уровня

Классификатор сетевого трафика

В данном репозитоии выложен код и исходные данные эксперимента по созданию классификатора сетевого трафика на основе количественных характеристик потока транспортного уровня. Основную статью можно почитать на Хабре: https://habrahabr.ru/post/304926/

Содержимое репозитория:

  • pcaptocsv.py - скрипт преобразования дампов сетевого трафика в формате PCAP в таблицу признаков в формате CSV
  • model.py - скрипт обучения модели на таблице призаков и проверки её производительности
  • ndpiReader - анализатор трафика, использующий библиотеку nDPI. Скомпилирован под Linux версии 4.х.
  • flows/ - папка с заготовленными таблицами признаков. Файлы проименованы как flows-sN.csv, где N означает число первых дейтаграмм (не считая TCP handshake), по которым сформирована таблица.
  • mdl/ - папка с дампами обученных моделей. Подаются на вход анализатору сетевого трафика реального времени Sherlock: https://github.com/vnetserg/sherlock

Самих файлов PCAP, на которых построены таблицы признаков, здесь нет и не будет. Мало ли какие я вводил пароли и качал торренты! :-)

Для запуска кода необходим интерпретатор Python версии 2.7.х с установленными библиотеками dpkt, numpy, sklearn и pandas. Если вы не хотите перекомпилировать ndpiReader, то в качестве ОС используйте Linux версии 4.х (у автора это Kubuntu 16.04 на ядре 4.4.0-22-generic).

Интерфейсы модулей

pcaptocsv.py

Данный модуль осуществляет преобразование дампов сетевого траифка в формате PCAP в таблицу признаков в формате CSV. Интерфейс модуля:

pcaptocsv.py [-o OUTPUT] [-s N] file [file ...]

  • file [file ...] - один или несколько PCAP-файлов
  • -o OUTPUT - имя выходного CSV-файла (по умолчанию "flows.csv")
  • -s N - строить таблицу признаков только по первым N сегментам транспортного уровня (не учитывая TCP handshake)

model.py

Данный модуль осуществляет обучение модели на таблице признаков и проверку её производительности. Интерфейс модуля:

model.py [-o FILE] [-r SEED] file

  • file - таблица признаков в формате CSV
  • -r SEED - задать семя генератора случайных чисел
  • -o FILE - имя выходного файла, куда будет сохранена обученная модель (эта модель потом подаётся на вход Sherlock'у)

В стандартный вывод модуль выводит три таблицы:

  • Таблица важности признаков (считывается у обученной модели RandomForest)
  • Таблица полноты и точности предсказаний по каждому классу трафика
  • Таблица реальных и предсказанных классов

Повторение эксперимента

В качестве семени генератора случайных чисел использовалось число 42. Соответственно для повторения результатов эксперимента надо запустить модули следующим образом:

model.py -r 42 csv/flows-s1000.csv

model.py -r 42 csv/flows-s3.csv