LINUX.ORG.RU

Данные и алгоритмы...

 ,


0

2

День добрый.

Есть надобность написать что-то на подобие фаервола, когда много входящих параметров нужно сопоставить с набором правил.

Может кто знает как реализуются такие вещи, т.е. алгоритмы, как всё это хранится и всё что с этим связано...

Может быть есть около-профильная дока на эту тему?

В общем приветствуется всё! )


Может быть есть около-профильная дока на эту тему?

гугл RFC

slackwarrior ★★★★★
()

Графы и конечные автоматы.

joy4eg ★★★★★
()

Подробности давай. Входящие параметры — строки? Длинные? Однообразные или постоянно меняются? Правил много? Будут расширяться? Какие требования по памяти и CPU? Почему плюсы, а не питон?

anonymous
()
Ответ на: комментарий от anonymous

Да, входящие параметры как строки та и int. Однообразные, с небольшим количеством изменений. Правил будет не больше 1000, да в начале будет мало, но они будут добавляться и меняться, да будут расширяться.

Требование одно - нужно быстро, так как как обработка http трафика.

denisE
() автор топика
Ответ на: комментарий от denisE

Пример бы.

А как прога будет использоваться? Если стэндэлон прокси-сервер, заворачивающий трафик, то получится ненужный велосипед.

Тот же сквид именно так и работает: правило-регулярка + что делать дальше.

anonymous
()
Ответ на: комментарий от anonymous

трудно описать пример, но участвует всё:

IP(для определения ГЕО)

https ?

куки

+ два ведра параметров в GET или POST.

Да, будет работать как прокси, но для того что-бы определить к какому нужно сделать коннект нужно «принять» решение, одной регуляркой не обойтись.

Как-бы есть решение в лоб, но как-то не очень расширяемо получается...

map <int,map<int, map<string, int > > >

Вот и спрашиваю, может что-то покрасивее есть. )

denisE
() автор топика
Ответ на: комментарий от denisE

Зафигачь пачку handler'ов, каждый будет парсить свою часть в зависимости от URI.

Типа:
/state - StateHandler
/conf - ConfHandler
и т.п.

UVV ★★★★★
()
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от denisE

Если это не часть готовой системы, я бы все-таки посоветовал взять nginx с Lua-модулем, а не CPP. https://habrahabr.ru/company/2gis/blog/199504/

Но это не так важно, код-то придется писать, что на Lua, что на CPP.

Здесь никаких правил нет, нужно плясать от печки.

Например, по geoip. Стоит завести функцию «ip»-«регион», и мапу, string->bool, из каких городов разрешен доступ.

region = get_address(ip);
if (admin_region_map.contains(region)) {
    pass_to_admin();
} else {
    pass_to_user();
}

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

anonymous
()
Ответ на: комментарий от denisE

Да, будет работать как прокси, но для того что-бы определить к какому нужно сделать коннект нужно «принять» решение, одной регуляркой не обойтись.

haproxy, при желании можно прикрутить lua.

Laz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.