Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Помоги с сокетами на делфе =) (https://forum.antichat.xyz/showthread.php?t=41982)

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 ипа помогите плиз!

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


Время: 02:28