Как я прохожу через среды прокси-сервера для нестандартных сервисов?

Я не реальное бедро на точно, какую роль сегодняшние прокси-серверы могут играть, и я учусь, так отнеситесь ласково ко мне :-) У меня есть клиент-серверная система, которую я записал использованию протокола собственной разработки и должен улучшить сторону клиента для согласования ее выхода из среды прокси.

У меня есть существующая система клиента и сервера, записанная в C и C++ для скорости и небольшого количества MFC в клиенте для обработки пользовательского интерфейса. Я записал и сторону сервера и сторону клиента системы в Windows (люди, на которых я работаю, главным образом веб-разработчики, использующие Windows все - не выбор), придерживание Сокетов Беркли, как это было через wsock32 для эффективности. Клиенты соединяются с сервером через нестандартный порт (даже при том, что использование порта 80 является опцией выйти из некоторых сред, но протоколом, который пробегается через него, не является HTTP). Соединение (соединения) TCP остается открытым на время клиентского участия в режиме реального времени конференции.

Наша клиентская база расширяется до всех видов сетевых окружений. Я смог решить много проблем путем добавления способности соединиться надежно по порту 443 и использования защищенных сокетов, который позволяет протоколу проходить через большое количество сред, так как внутренние пакеты не могут быть сниффинговыми. Но все больше наших клиентов находится позади среды прокси-сервера, и мои прямые подключения не удаются. Мое старое школьное понимание прокси-серверов - то, что они действуют как прокси для внешнего содержимого HTML по HTTP, возможно локально кэшируя популярный материал для более быстрого локального доступа, и также позволяя их штату IT поместить в черный список определенные целевые сайты. Клиент жалуется, что мое программное обеспечение не распознает и легко перемещается по своему пути через их среды прокси, но я нахожу трудным решить, каково мое "лучшее пригодное" решение должно быть. Мое программное обеспечение не разъединяет соединение после каждого клиентского запроса, и к тому же пакеты могут прибыть из любой стороны в любое время, в основном Ваша типичная пользовательская клиент-серверная система для определенной ниши.

Моя первая реакция, "почему они не могут только добавить адреса моего сервера к своему белому списку", но если существует программный способ, которым я могу пройти, не требуя, чтобы их штат IT помог, это с политической точки зрения лучше и возможно лучшее решение так или иначе. Плюс, возможно, я все еще не понимаю роли и цели того, что прокси-серверы и среды вырастили, чтобы быть в эти дни.

Моя первая попытка решения состояла в том, чтобы использовать WinInet со своими различными возможностями прокси установить соединение по порту 80 к моему нестандартному серверу протокола (который знает достаточно, чтобы распознать и ответить, что простой выглядящий словно HTTP ПОЛУЧАЕТ запрос и отвечает на это с простой страницей ответа HTTP для обхождения некоторых сред, которые используют начальный пакет, осуществляющий сниффинг (DPI)). Я получил фактический дескриптор СОКЕТА позади объекта запроса HINTERNET WinInet и надеялся использовать это вместо существующего Сокетного соединения своего программного обеспечения, и надо надеяться не должны измениться намного больше на стороне клиента. Это первоначально, казалось, было моим решением, но на дальнейшем контроле кажется, что ОС получает первый шанс в полученных данных по этому сокету с тех пор, когда я уведомляюсь относительно событий через стандартный выбор (...) оператор на сокете, и запросите размер доступных данных через ioctlsocket, вызов следует, но возвращает доступных 0 байтов, чтения не работают, и это спускается оттуда.

Кто-то может сказать мне о клиентской библиотеке (коммерческий, прекрасен), позволит мне закончить эти среды прокси-сервера с как можно меньше пользователем и справкой штата IT? Из того, что я читал, это выросло мимо SOCKS, и я полагаю, что кто-то, должно быть, решил эту проблему передо мной.

Спасибо за чтение моего многоречивого вопроса,

Ripred

1
задан Ripred 8 June 2010 в 08:58
поделиться

1 ответ

Если ваше программное обеспечение может установить SSL-соединение через порт 443, то вы на 99% достигли цели.

Обычно HTTP-прокси настроены на проксирование SSL на 443 (для целей HTTPS). Вам просто нужно научить ваше программное обеспечение использовать HTTP-прокси. Проверьте HTTP RFCs для получения полной информации, но версия Cliffs Notes такова:

  • Подключитесь к HTTP-прокси на прокси-порту;
  • Отправьте на прокси:

.

 CONNECT your.real.server:443 HTTP/1.1\r\n
 Host: your.real.server:443\r\n
 User-Agent: YourSoftware/1.234\r\n
 \r\n
  • Затем разберите ответ прокси, который будет начинаться с кода состояния HTTP, за которым последуют заголовки HTTP, а затем пустая строка. После этого вы будете разговаривать со своим адресатом (если код состояния указывает на успех) и сможете начать SSL-переговоры.

Во многих корпоративных средах вам придется пройти аутентификацию на прокси-сервере - почти всегда это HTTP Basic Authentication, что довольно просто - опять же, смотрите RFC.

2
ответ дан 2 September 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: