Просмотр полной версии : Помоги с сокетами на делфе =)
Вобщем пишу прогу она работает с сетью через сокеты,но там потребовалось защита от ддоса :) тоесть без нее можно сервер положить спрутом :( вот и я что то не могу придумать как ограничить количество подключений с 1 ипа :confused: помогите плиз!
Joker-jar
11.06.2007, 13:55
То есть на делфне пишется серверная часть? Сокеты реализуются через компонент или на winsock?
Не делфе пишуться оби проги. Обе используют TClient
Joker-jar
11.06.2007, 14:10
В общем, я думаю, что нужно создать массив записей вида:
record
ip: string;
timeout: integer;
end;
И при подключении клиента проверять: если его IP не содержится в массиве, то разрешить подключение, его IP занести в массив, в timeout внести текущее время. Если ip содержится в массиве, то отнимаем от текущего времени значение timeout, если оно больше определенного значения, разрешаем подключение и обновляем данные, иначе запрещаем. Это в обобщенном виде, на практике может оказаться немного сложней.
Тогда вопрос как отключить клиента ? типа если Socket.ActiveConnections > 100 then ????
Socket.Close не помогает :(
Joker-jar
11.06.2007, 14:50
ServerSocket1.Socket.Connections[id].Close;
Где id - порядковый номер клиента. Блин, не люблю я эти компоненты сетевые, неудобные они.
Joker-jar
11.06.2007, 14:52
Функция Accept из стандартной библиотеки сокетов позволяет серверу извлечь из очереди соединений информацию о подключившемся клиенте и создать сокет для его обслуживания. Эти действия выполняются безусловно, для любых подключившихся клиентов. Если сервер допускает подключение не любых клиентов, а только тех, которые отвечают некоторым условиям (для протокола TCP эти условия могут заключаться в том, какие IP-адреса и какие порты допустимо использовать клиентам), сразу после установления соединения его приходится разрывать, если клиент не удовлетворяет этим условиям. Для упрощения этой операции в WinSock 2 предусмотрена функция WSAAccept
Вот это рульная штука. WinSock 2 вообще рулит ;)
gemaglabin
11.06.2007, 14:55
Хочешь не хочешь , ты ВСЕГДА юзаешь winsock2 , только подключаешь заголовочные файлы второй или первой версии.
> вот и я что то не могу придумать как ограничить количество подключений с 1 ипа помогите плиз!
возможно будет логичным предположтиь что стоит дисконектить клиента, если он уже подключен? сравнить его айпи с теми что уже подключены?
я незнаю как там у вас все в делфи с тысячей дибильных компонентов где подключение - это визаульная часть формы приложения, но я бы лично в потоке сервера записывал бы айпи и не создавал бы потом обслуж. клиента если айпи уже есть, скажем в массиве
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot