Показаны сообщения с ярлыком snort. Показать все сообщения
Показаны сообщения с ярлыком snort. Показать все сообщения

среда, 20 января 2021 г.

Snort3

 Вышел снорт3, порт снорта2, написанного на С, порт на С++.

Вижу в коде совершенно неприемлемые для разработчика с любым стажем неловкости портирования.

Пример: во втором снорте часто используются связанные списки для хранения данных.

Для поиска в этих списках само собой приходится итерировать по списку.

В стандартной библиотеке плюсов из коробки есть варианты хранения данные в ассоциативных контейнерах.  Сравнительно мгновенное время поиска и в данном случае незначительный рост трат памяти и ресурсов на хранение/модификацию хранимого плюс удобство кодера, казалось бы, должны перевесить.  Просто здравый смысл в выборе типа контейнера дал бы мап, хешед мап. 

Но нет.  Осуществлен пословный перевод с С на С++. Более того.  Выбран худший контейнер. Вместо связанного списка задействовали вектор. std::vector<>. Так и вижу этот разговор между сеньором и джуном:

Джун: 

-вижу в снорте2 связанный список. модифицируется изредка. Для поиска пробегается весь список. На что меняем в снорте3 - на очередь и так же будем бегать?

Сеньор:

-совсем больной? какая очередь?

-ну а на что тогда?

-ну если совсем идей нет то попробуй вектор

-нет проблем


понедельник, 18 июля 2016 г.

Ускорение анализатора сетевого трафика Snort при помощи библиотеки Hyperscan.

Осенью прошлого года компания Intel открыла исходники библиотеки быстрого поиска совпадений для регулярных выражений Hyperscan. Проект был куплен двумя годами ранее. Предназначением этого удачного стартапа было ускорение DPI приложений за счёт использования SIMD compiler intrinsics. Использование новых наборов инструкций позволяет добиться значительного прироста производительности в самом узком месте анализаторов трафика: в поиске совпадений по образцу.  Snort  - самое известное DPI-приложение с открытым кодом - получил поддержку Hyperscan только в начале этого лета. Представленный патч предназначен для версии Snort 2.9.8.2 но без проблем накладывается на 2.9.8.3 и может быть портирован и на предыдущие релизы Snort. В статье описывается установка зависимостей и сборка снорт на дистрибутивах Gentoo и Ubuntu.