Прокси-сервер с использованием Indy

Я новичок в Indy и хочу создать с ним простой прокси-сервер. Это довольно большая библиотека, и я просто не знаю, с чего начать. Когда клиент подключается к серверу, OnExucute запускается и получает клиентское подключение в качестве параметра (AContext.Connection).

Я хочу сделать следующее:

[client connection] := AContext.Connection
read host/port from [client connection]
[remote connection] := connect to host/port
while both connections alive:
  if data available in [client connection]:
    read data from [client connection]
    write data to [remote connection]
  if data available in [remote connection]:
    read data from [remote connection]
    write data to [client connection]

Вопрос в том, какие функции я должен использовать для этого? В объекте Connection есть свойство IOHandler с множеством их. Пожалуйста помоги.

Я использую Indy, который поставляется с Delphi2010.


person Frantic    schedule 09.11.2010    source источник


Ответы (1)


Indy имеет свои собственные прокси-компоненты, которые делают то, что вы просите. Посмотрите на компоненты TIdMappedPortTCP и TIdHTTPProxyServer как на отправную точку.

TIdMappedPortTCP — это прокси общего назначения, который просто передает необработанные данные туда и обратно. Вы можете использовать его событие OnConnect для динамической настройки целевого хоста/порта для этого соединения (например, считывая его с клиента), или вы можете установить его свойства MappedHost и MappedPort статически для всех соединений. Вы можете использовать его события OnExecute и OnOutboundData для изменения данных при их прохождении через прокси-сервер, если это необходимо.

TIdHTTPProxyServer — это специализированный прокси-сервер только для проксирования на основе HTTP, когда клиент использует глаголы HTTP GET, POST, HEAD и CONNECT, указывая абсолютные URL-адреса целевого хоста/порта, а затем передает заголовки и данные HTTP туда и обратно по мере необходимости. (CONNECT обычно используется для проксирования соединения SSL/TLS через брандмауэр).

person Remy Lebeau    schedule 09.11.2010
comment
Действительно мудрый совет, спасибо! Источники обоих компонентов очень полезны. Если кому-то интересно, наконец-то я пришел с чем-то вроде этого: pastebin.com/ixt2gssD - person Frantic; 10.11.2010