![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добрый день,
Есть серверная система. Есть class ServerSocket и class SocketUser. Нужно реализовать антифлуд на сокетах. Т.е. если пользователь начал флудить - отключить его, при рецидиве - заблокировать АЙПИ к примеру. Вот только не приходит на ум как это реализовать.
только беда в том что нужно иметь данные о прежних сообщениях пользователя. A где их хранить? В классе SocketUser?
Нелогично как-то получается спрашивать у пользователя а не флудит ли он? Хранить для этого отдельный контейнер? (ну или адаптер на контейнер)
Тоже не очень, так как придется каждый раз снова искать его в контейнерe, притом что пользователь передан событию как параметр и если запихнуть эти данные в него - получится оптимальнее (но некрасиво) ![]() Вот вобщем-то и вопрос. Спасибо заранее Это сообщение отредактировал(а) azesmcar - 13.4.2009, 15:32 |
||||||
|
|||||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Да. А он взял и правду сказал. И правда не логично ![]() И еще. Многова не понятно. Знаки препинания расставьте. ![]() -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Суть не в том что пользователь может сказать правду или не правду. Суть в том что с точки зрения логики распределения обязанностей классов - роль проверки "флуда пользователя" не подходит классу самого пользователя. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
мне кажется это нужно делать не на уровне SocketUser а намного выше, я не знаю что это за приложение, но если это что-то вроде мессенджера, то у тебя все-равно будет какой-либо компонент, который будет хранить историю сообщений, какую-либо информацию о пользователе и тд, вот где-то там это и нужно реализовывать
|
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Lazin
Точно! Это не совсем мессенджер, но один из сервисов приложения - обмен текстовыми сообщениями. Я хочу построить антифлуд на уровне базового сервиса..т.е. чтобы он работал для каждого сервиса. Хоть какая-то базовая защита от дос атаки. Компоненты высокого уровня есть, и в принципе они могут это проверить но только из базы данных. Поиск по базе - операция медленная, делать это для каждого сообщения не хотелось бы делать..да и в map придется делать поиск по пользователю, правда там он будет намного быстрее. Наверное так и сделаю, так как пока другого выхода не вижу. Т.е. выходит этот вариант?
Это сообщение отредактировал(а) azesmcar - 13.4.2009, 19:03 |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ну, защита от перегрузки и защита от флуда это разные вещи, флуд это из той-же категории что и спам - анализ поведения пользователя, а защита на уровне соединения может выглядеть так: у продюсера есть очередь с сообщениями, мы добавляем туда сообщения методом push, а другой поток, достает оттуда сообщения и отправляет их (он может реализовывать алгоритм Нагеля или нет, не суть выжно...), если во время вызова push размер очереди превышает некоторый порог, метод push блокируется, и не возвращает управление, пока другой поток не выберет все сообщения и не отправит их потребителю. В этом случае скорость, с которой данные могут быть отправлены, будет зависеть от того, с какой скоростью они могут быть обработаны. ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Lazin
Ну флуд это одна из разновидностей ДОС атаки.
А вот насчет очереди мысль интересная...можно реализовать. Только вот контейнер queue в стандарт не вошел. Надо будет написать адаптер видимо (не люблю не стандартных решений) ![]() В принципе если в очереди пользователя больше чем N-ое число необработанных сообщений разница во времени между которыми не более секунды - это флуд. Адаптер очереди может имплементировать патерн State и перевести в состояние Blocked - как только flood detected. Думаю сойдет, спасибо. |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
вы уверены что не вошёл? 23.2.3.1. Class template queue |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
тут нужна несколько другая очередь
Добавлено через 3 минуты и 25 секунд concurrent_queue из intel threading building blocks, или просто порт завершения |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
zim22
Интересный вопрос..я был уверен что - не вошел Эффективное использование STL ![]() а вот стандарт... ![]() ![]() Добавлено через 1 минуту и 24 секунды
Завтра во время реализации разберусь..главное идея ![]() |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
azesmcar, в твоей цитате речь о другом. Что есть стандартные контейнеры, но они строго говоря не являются STL-совместимыми (всякие begin, end и прочее) по тем или иным причинам.
|
|||
|
||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Любитель
Фразу "контейнер queue не относится к STL (стандартной библиотеке C++)" понимать как "не является STL совместимым?" Я почему-то понимаю ее как - не вошла в стандарт. Но в стандарте ясно сказано
И среди них stack, queue, bitset ... Так как то что
? Добавлено через 2 минуты и 13 секунд Модераторам: Нельзя ли вынести тему связанную сo стандартностью queue вынести в отдельную? Спасибо ![]() Это сообщение отредактировал(а) azesmcar - 14.4.2009, 00:36 |
||||||
|
|||||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
STL - это часть стандартной библиотеки. Хотя в любом случае фраза из книги звучит немного кривовато
![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Любитель
Видимо перевод неудачный. Если глубоко вникнуть - понять можно, но я ее давно читал..как понял так и запечатлелась ![]() Ладно спасибо, посмотрю оригинал Мейерса по этому вопросу. |
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
русские переводы книг - это зло. вот пример из книги, которую я сейчас читаю:
в оригинале это было так:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |