Разработать парсер правил фаервола, понимающий синтаксис UFW. Это задача, родственная задаче Фаервол.
Файл с одним или несколькими правилами фаервола. В каждой строке — одно правило. Например:
allow 53
deny 53/tcp
allow from 192.168.0.0/24 to any port 22 proto tcp
allow from any to 192.168.0.0/24 port 53 proto udp
Необходимо реализовать класс-парсер для правил. Результатом парсинга является линейная структура данных (std::list
, std::vector
), хранящая в себе отдельные правила. Подумайте о том, как инкапсулировать информацию о правиле (со всеми возможными вариантами) в соответствующей структуре (struct FirewallRule
).
При некорректном синтаксисе правила парсер должен сигнализировать об ошибке (например, с помощью механизма исключений). Постарайтесь генерировать максимально точное сообщение об ошибке с указанием места и причины.
Разработайте набор тестов для максимального количества разнообразных случаев корректных и некорректных правил.