Конференция "Сети" » Как сделать аутификацию после подключения клиента к TServerSocket [D7, WinXP]
 
  • minomorf (12.10.09 16:53) [0]
    Т.е. клиент подрубается и сразу отправляет пакет с паролем.
    Если на сервере сразу после подключения не пришел пароль или он неверен - отключить клиента.

    Как это сделать на сервере TServerSocket.
    Можно и на пальцах, а именно какие события сервера придется ловить и как сделать таймаут ожидания пакета с паролем?
  • Сергей М. © (12.10.09 16:57) [1]
    Режим какой - nonblocking или threadblocking ?
  • minomorf (12.10.09 17:02) [2]
    NonBlocking
  • Сергей М. © (12.10.09 17:18) [3]

    > какие события сервера придется ловить


    OnClientConnect и OnClientRead


    > как сделать таймаут ожидания пакета с паролем


    В обработчике OnClientConnect запускаешь таймер с заданным периодом срабатывания - он будет отсчитывать время таймаута.

    В обработчике события таймера закрываешь соединение.

    В обработчике OnClientRead принимаешь передаваемые клиентом данные, аккумулируешь их в буфере, анализируешь содержимое буфера и в случае обнаружения  в нем ожидаемого пароля останавливаешь таймер.
  • minomorf (12.10.09 18:18) [4]
    Спасибо
  • Сергей М. © (12.10.09 18:22) [5]

    > какие события сервера придется ловить


    + OnClientDisconnect + OnClientError

    Эти события тоже нужны как минимум для того чтобы остановить запущенный таймер при неожиданном дисконнекте по инициативе клиента или возникшей ошибке
  • minomorf (12.10.09 18:38) [6]
    А еще вопрос. Как передать таймеру идентификатор сокета?
  • minomorf (12.10.09 18:39) [7]
    Надо создавать массив связку Сокет-Таймер?!
  • Сергей М. © (12.10.09 18:49) [8]
    Надо, если на каждый клиенский сокет ты будешь создавать отдельный таймер.
  • Сергей М. © (12.10.09 18:51) [9]

    > передать таймеру идентификатор сокета


    У TTimer, к примеру, есть св-во Tag.

    Можно и наоборот - сослаться на созданный TTImer в свойстве Socket.Data.

    ТОлько вот вовсе необязательно плодить кучу таймеров - достаточно всего одного.
  • minomorf (12.10.09 19:17) [10]
    А на что указывает Socket.Data?
  • Сергей М. © (12.10.09 19:23) [11]
    На что захочешь, на то и укажет.
    Это пользовательское св-во.
  • minomorf (12.10.09 21:15) [12]
    Отлично, догда я пожалуй в data опишу число, типа если оно > delay то отрубаемся, если = authorize то ничего не делаем, а в таймере задаем обход всех сокетов с инкрементом data.
  • Сергей М. © (12.10.09 21:22) [13]

    > minomorf   (12.10.09 21:15) [12]


    Ну да, примерно так.
  • bananas © (09.06.10 04:20) [14]
    у меня схожая задача.
    скажите, как отключить конкретного пользователя?
    Допустим подключено 20 клиентов, их ip хранятся в БД. Нужно отключить клиента с ip одним из БД.
    Отключить именно серверсокетом, ибо на клиенте ничего писать нельзя. Я пока кроме отключения всего серверсокета (что, как я полагаю, отключит всех клиентов) ничего не нашел..
  • Slym © (09.06.10 11:04) [15]
    with ServerSocket.Socket do
    begin
     for i:=0 to ActiveConnections-1 do
       if Connections[i].RemoteAddress='127.0.0.1' then
         Connections[i].Close;
    end;

  • ArtGre (14.06.10 18:01) [16]
    Vsem zdrasti. izvenite za pocherk, drygoi klaviatyri net.
    Y menia vopros, mojno li ispolzovat TServerSocket dlia raboti v Internete.
    Esli da, v chem otlichia ot raboti v lokalke?
    spasibo
  • Сергей М. © (14.06.10 18:30) [17]

    > ArtGre   (14.06.10 18:01) [16]


    Можно.
    Ни в чем.
  • Anatoly Podgoretsky © (14.06.10 18:36) [18]
    > ArtGre  (14.06.2010 18:01:16)  [16]

    Отличий нет. Код одинаково пригоден.
  • ArtGrek (14.06.10 18:38) [19]
    R smotrel cherez IRIS obmen danix klienta k kotorimy xochy servak napisat, po IP ix servaka 5 client portov rabotaet i server posrt 80, kak mne ego(80) ispolzovat v svoem servake?
  • ArtGrek (14.06.10 18:46) [20]
    opishy nemnogo klientskyu progy.
    et igra, kak R ponial, y kajdogo porta svoe prednaznachenie,

    soderjimoe ini fila
    Game=
    Update=
    Authorization=
    Registration=
    OnCollect=



    mne bi xotia bi zapystit chto b igra ne vikluchalas
  • ArtGrek (14.06.10 19:41) [21]
    spasibo vsem kto popitalsia pomoch, no vrodi nemnogo razobralsia.
    server posilaet na port 80, a klient prinimaet cherez svoi 5 portov v zavisimosti ot zadachi i tak je otvechaet cherez 80 port
    teper ostalos razobraca v protokole
    a potom rashifrovivat paketi
    esli est predlojenia s ydovolstviem vislyshau opitnix kriptografov
    R sam proger novichek, dymau lubaia infa bydet poleznoi
  • Сергей М. © (14.06.10 21:16) [22]

    > opitnix kriptografov


    К конференции "Сети" криптография не имеет отношения.
  • ArtGrek (14.06.10 21:30) [23]
    tam s protokolom nemnogo slojnovato on zashifrovan, a R eshe v etom ne razberaus
    et ot klienta servery

    GET /3/srv/hottarget.php?line=9&bet=1&turnid=488&PHPSESSID=33b856ppbs31vak092jorl61o2 HTTP/1.1
    Accept: */*
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
    Host: 000.000.000.000
    Cache-Control: no-cache
    Cookie: parkinglot=1; PHPSESSID=33b856ppbs31vak092jorl61o2



    et ot  servera klienty

    HTTP/1.1 200 OK
    Date: Mon, 14 Jun 2010 00:02:17 GMT
    Server: Apache/2.2.3 (CentOS)
    X-Powered-By: PHP/5.1.6
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 114
    Content-Type: text/html; charset=windows-1251

    cr=4442000 rl=134283520215023 ok=1 turnid=488 fc=10 fp=1 pr=0 jp=0 cp=1 gn=5 id=1545903063 dt=10.06.14 -- 02:02:17HTTP/1.1 200 OK
    Date: Mon, 14 Jun 2010 00:02:20 GMT
    Server: Apache/2.2.3 (CentOS)
    X-Powered-By: PHP/5.1.6
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 44
    Content-Type: text/html; charset=windows-1251

    pr=0 ok=1 turnid=489 dt=10.06.14 -- 02:02:20HTTP/1.1 200 OK
    Date: Mon, 14 Jun 2010 00:02:20 GMT
    Server: Apache/2.2.3 (CentOS)
    X-Powered-By: PHP/5.1.6
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 114
    Content-Type: text/html; charset=windows-1251

    cr=4442000 rl=435A403A2804163 ok=1 turnid=490 fc=10 fp=2 pr=0 jp=0 cp=1 gn=6 id=2101165749 dt=10.06.14 -- 02:02:20HTTP/1.1 200 OK
    Date: Mon, 14 Jun 2010 00:02:22 GMT
    Server: Apache/2.2.3 (CentOS)
    X-Powered-By: PHP/5.1.6
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 44
    Content-Type: text/html; charset=windows-1251
  • ArtGrek (14.06.10 21:32) [24]
    eshe ne razobralsia v stryktyre protokola, razberetes?
  • Eraser © (15.06.10 03:20) [25]
  • Сергей М. © (15.06.10 10:39) [26]

    > razberetes?


    Оно нам надо ?
  • ArtGrek (15.06.10 13:05) [27]

    > Оно нам надо ?

    o cene dogovorimsia
  • ArtGrek (18.06.10 23:21) [28]
    net jelaushix podzarabotat)?
  • bananas © (21.06.10 06:52) [29]
    Slym
    Спасибо))
    Извиняюсь за долгий ответ, обстоятельства..
 
Конференция "Сети" » Как сделать аутификацию после подключения клиента к TServerSocket [D7, WinXP]
Есть новые Нет новых   [134437   +27][b:0][p:0.001]