delphi | Как реализовать "ретранслятор" запросов через сокеты?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Bonkеrs, 9 Oct 2021.

  1. Bonkеrs

    Bonkеrs Member

    Joined:
    5 Feb 2014
    Messages:
    36
    Likes Received:
    17
    Reputations:
    3
    Задача такова. Хочу написать вебсервер-анонимайзер, который при обращении к нему ретранслирует запросы (через прокси) и возвращает полученный результат:

    1) программа висит на каком-нибудь порту (например 888) в режиме сервера (принимает запросы);
    2) пользователь в браузере заходит на адрес http://localhost:888/ (т.е. браузер посылает запрос в программу);
    3) программа получила запрос от браузера, и отправила его на сайт (например htmlbook.ru) через прокси, поменяв в запросе строчку "Host: localhost:888" на "Host: htmlbook.ru";
    4) дождавшись ответа от htmlbook.ru, программа в точности передает его браузеру.

    Т.е. получается, что пишешь в браузере http://localhost:888 и тебе открывается сайт htmlbook.ru, причем запрос от нашего сервера на htmlbook должен быть через прокси.

    Нет ли технических ограничений, чтобы реализовать такое чудо? Подскажите как организовать алгоритм, какие компоненты использовать.

    За пример реализации готов заплатить.
     
    #1 Bonkеrs, 9 Oct 2021
    Last edited: 9 Oct 2021
    dooble likes this.
  2. Раrаdох

    Раrаdох Elder - Старейшина

    Joined:
    30 Jan 2014
    Messages:
    95
    Likes Received:
    140
    Reputations:
    33
    Технических ограничений на это нет — хедер Host можно легко изменить (по меньшей мере, потому что это прикладной уровень по модели OSI). Даже при использовании шифрования через HTTPS эта информация передается как plain text и тому есть причины.
    Но почему бы вам не реализовать/использовать прокси-сервер в общем виде (т.е. реализуя/используя протокол вроде SOCKS)?
     
    #2 Раrаdох, 14 Nov 2021
    Last edited: 14 Nov 2021
    K800 and dooble like this.
  3. dooble

    dooble Members of Antichat

    Joined:
    30 Dec 2016
    Messages:
    231
    Likes Received:
    601
    Reputations:
    145
    100% аналога имхо не получится.
    Это был бы хороший инструмент для межсайтового скриптинга (Cross-Site Scripting).

    А просто контент с конкретных сайтов получать можно, это умеют делать reverse-proxy (в этом режиме умеют работать nginx, apache, haproxy).

    Для полноценной работы через прокладку, ее нужно указывать браузеру в качестве прокси.
    Или переназначать ДНС, как делают сервисы типа CloudFlare.
     
    Раrаdох and K800 like this.
  4. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    638
    Reputations:
    476
    Решение такое:
    Еще лет 10 назад для учебной статьи по компонентам Delphi INDY была создана небольшая демонстрационная утилита - "Пример веб-сервера анонимайзера". В связи с утратой актуальности данного стека технологий, материал тогда так и не был написан/опубликован. А программу могу предложить сейчас:
    [​IMG]

    Описание:
    ПО WSAN является демо-версией мостового анонимайзера с поддержкой socks-прокси. Разработано на Delphi 7 с применением следующих комплектных компонентов INDY: idHTTPServer, idHTTP, IdIOHandlerSocket, IdSocksInfo, IdAntiFreeze. Позволяет обращаться к заданному сайту по локальному адресу и порту, в том числе с проксификацией внешнего трафика. Поддерживаются socks-прокси 4 и 5 версии, включая авторизацию. Благодаря применению INDY исходный код предельно лаконичен, состоит из вспомогательных процедур применения настроек интерфейса и единственной главной процедуры, организующей обмен данными между компонентами.

    Общая схема логики работы компонентов, их связи:
    [​IMG]

    Недостатки демо:
    Отсутствует поддержка https. Не обрабатываются редиректы (код 301, правда для целей веб-анализа это иногда и нужно). Компонент idHTTP работает в однопоточном режиме из-за чего организована очередь обращений к нему, что снижает производительность утилиты под многопользовательскую эксплуатацию. Не поддерживается смена настроек socks-прокси "на лету".

    Использование и загрузка:
    ПО может быть использовано как заготовка для более продвинутого продукта, распространяется совершенно свободно, как FreeWare. В архиве вместе с бинарной версией размещен прокомментированный исходный код проекта.
    Скачать программу и исходный код wsan_1.0.0.zip (220КБ).
     
    _________________________
    alexzir, fandor9, #colorblind and 2 others like this.