Idtcpserver1

Тема в разделе "Delphi - Сети", создана пользователем slavon-x86, 22 апр 2008.

  1. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    IdTCPServer1
    Как можно получить и отравить данные, если 2 подключения одновременно.
    Т.е. по сути как работать с каждым подключением по отдельности ?
     
  2. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Разобрался ! Вот пример, может кому ещё понадобиться !

    Код (Text):
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
    List: TList;

    begin
    try
    List := IdTCPServer1.Contexts.LockList;
    Memo1.Lines.Add(IntToStr(List.Count));
    IdTCPServer1.Contexts.UnlockList;
    except
    end;

    TIdContext(List.Items[0]).Connection.Socket.WriteLn(s);
    TIdContext(List.Items[0]).Connection.Disconnect;
    end;
     
  3. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Ничего я не понял ! :angry:
    То что я написал выше работает так криво, что у меня мозги через нос вытекают !

    К примеру: есть 3 активных подключения, первый отключается, то все остальные сдвигаються и меняются индексы ! Я хочу передать сообщение 1 подключению, но пока в OnDisconnect я обрабатываю сдвиг индексов - сообщение передаётся 2 клиенту !

    Как сделать чтобы было нормально ?
     
  4. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Мне надо создать HTTP сервер с помощью компонента idTCPserver
    Но проблема в следеющем:
    Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос.
     
  5. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Это уже готовый HTTP сервер, который не совсем удовлетворяет нужным мне параметрам. Его конечно можно переделать, но idTCPserver для моего случая лучше подходит.
    На каком-то сайте (не помню на каком) была написана статья взлома TIdHTTPServer. Через какую-то команду можно получить доступ к любой папке !

    Но всё таки я реально не могу понять как решить проблему
    Код (Text):
    Браузер делает одновременно 2 запроса к серверу. Как мне по отдельности обработать (получить и отправить данные) каждый запрос.
     
  6. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Постановка задачи

    Есть компонент idTCPserver. localhost:80

    Клиент (браузер, к примеру Opera) отсылает одновременно 3 запроса на (localhost:80) - 1: GET index.php, 2: GET favicon.php, 3: GET signup.php

    Надо отосдать: "Текст1" на запрос (1)
    Надо отосдать: "Текст2" на запрос (2)
    Надо отосдать: "Текст3" на запрос (3)

    Как мне отослать ответы на каждый запрос ?


    Пример

    Код (Text):
    var
    List: TList;
    s: String;
    i: Integer;

    Begin

    List := IdTCPServer1.Contexts.LockList;
    IdTCPServer1.Contexts.UnlockList;

    // Действие 1 - Количество активных подключений
    i := List.Count;

    ...

    // Действие 2 - Отправка данных
    TIdContext(List.Items[i-1]).Connection.Socket.WriteLn(s);

    end;
    Я получаю количество активных подключений (Действие 1). К примеру i = 3
    Затем отключается 1-й пользователь, и i становиться = 2
    Происходит событие OnDisconnect, но пока данные там обрабатываются запускается отправка данных (Действие 2) пользователю i = 3, но его уже не существует, т.к. первый отключился, а остальные сдвинулись.
     
  7. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Код (Text):
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    begin
    ...
    end
     
  8. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Хм, я туплю ! Причём уже 15 часов подряд :) !

    Оно просто запускает событие TForm1.IdTCPServer1Execute(AContext: TIdContext) повторно если не все данные прочитаны. Как прочитать все данные ?

    Я делаю вот так, но чувствую что это неправильно, т.к. строка может быть пустой...
    Код (Text):
    repeat
    s1 := AContext.Connection.Socket.ReadLn;
    s2 := s2 + s1;
    until s1 = '';

    И вопрос н засыпку, как узнать MAC-адресс клиента ?
     
  9. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Если бы я смог в этом разобраться...


    Узнать можно ! Вопрос как !?
    Для защиты от подмены IP
     
  10. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Ну вобщето мак адресс обеспечивает связь через IP протокол
    МАК адрес это физический адрес контроллера, и на нём вся маршрутизация основана. Снифер его видит, а зничит он есть ! Его надо только извлечь как-то !



    Код (Text):
    [code]Для защиты от подмены IP
    Странная трактовка, а как вы себе это представляете? Вот клиент пришел к вам через анонимный прокси, это как[/code]
    Отправлю запрос на обратный IP-адресс, если попросит логинизироватся, то это частный прокси сервер, причём даже если он мега анонимный, у него всё равно открыт один из Default портов ! А если не анонимный, то просто выполнит мой запрос !
     
  11. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Вот маки
     

    Вложения:

    • 123.JPG
      123.JPG
      Размер файла:
      64,5 КБ
      Просмотров:
      32
  12. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Пошлю любой GET запрос с указанием в заголовке прокси ! Вобще анонимный прокси я точно не знаю как определить !
     
  13. slavon-x86

    slavon-x86 Well-Known Member

    Регистрация:
    18 дек 2005
    Сообщения:
    216
    Симпатии:
    0
    Возможно он поросит авторизоваться ! Если попросит, значит прокси !
     

Поделиться этой страницей