PDA

Просмотр полной версии : Помоги с сокетами на делфе =)


zl0y
11.06.2007, 13:44
Вобщем пишу прогу она работает с сетью через сокеты,но там потребовалось защита от ддоса :) тоесть без нее можно сервер положить спрутом :( вот и я что то не могу придумать как ограничить количество подключений с 1 ипа :confused: помогите плиз!

Joker-jar
11.06.2007, 13:55
То есть на делфне пишется серверная часть? Сокеты реализуются через компонент или на winsock?

zl0y
11.06.2007, 14:01
Не делфе пишуться оби проги. Обе используют TClient

Joker-jar
11.06.2007, 14:10
В общем, я думаю, что нужно создать массив записей вида:
record
ip: string;
timeout: integer;
end;
И при подключении клиента проверять: если его IP не содержится в массиве, то разрешить подключение, его IP занести в массив, в timeout внести текущее время. Если ip содержится в массиве, то отнимаем от текущего времени значение timeout, если оно больше определенного значения, разрешаем подключение и обновляем данные, иначе запрещаем. Это в обобщенном виде, на практике может оказаться немного сложней.

zl0y
11.06.2007, 14:18
Тогда вопрос как отключить клиента ? типа если 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 , только подключаешь заголовочные файлы второй или первой версии.

KEZ
11.06.2007, 18:08
> вот и я что то не могу придумать как ограничить количество подключений с 1 ипа помогите плиз!

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