Перехват / Перенаправление исходящих подключений http на окнах

я смотрю, чтобы перенаправить исходящие соединения http (которые не используют системный прокси) на машине с Windows.

Фон:

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

Экспериментально я использовал файл хостов Windows для успешного перенаправления на localhost, но это нецелесообразно, так как у меня есть другие сервисы, которым нужно прослушивать http-порт 80 по умолчанию, и я не хочу настраивать другой физический сервер только для этого

Устаревшее программное обеспечение не использует системный прокси, поэтому такие решения, как FiddlerCore, не будут работать (к сожалению, потому что это потрясающе!)

Я заметил, что EasyHook упоминался в подобных вопросах в связи с winsock, но мой опыт программирования на низком уровне крайне ограничен, и прежде чем я отправлюсь в долгое и запутанное путешествие, я хотел бы проверить, что я на правильном пути!

Итак, возможно ли теоретически перехватывать и перенаправлять исходящий http-трафик, который не использует системный прокси, путем перехвата winsock (предпочтительно с easyHook в c #)?

Простой ответ да / нет будет хорошо, некоторые рассуждения или даже лучшая документация будут фантастическими

0

Решение

Я делал это много раз, так что это абсолютно возможно. Используйте следующие шаги, чтобы начать.

  1. Пусть ваша программа запустит целевое приложение с CreateProcess и передать CREATE_SUSPENDED к dwCreationFlags аргумент. Это запустит целевое приложение, но не запустит выполнение.
  2. Вставьте DLL, которая содержит ваши функции «батут».
  3. Подцепить функцию Winsock gethostbyname.
  4. Вызов ResumeThread на целевой процесс обрабатывает основной поток, чтобы начать выполнение.
  5. В вашем хуке вызовите функцию реальный gethostbyname Функция Winsock, когда она возвращает действительный указатель на hostent Структура изменяет адрес данных, чтобы он указывал на ваше петлевое устройство (localhost).

В зависимости от того, как работает целевое приложение, вам может понадобиться подключить дополнительные функции Winsock, но не gethostbyname обычно достаточно для этого сценария.

Возможно, вы захотите написать функции перехвата, которые находятся в вашей DLL на C ++ или C. Использование C #, вероятно, здесь не вариант, плюс он будет включать множество зависимостей, которые могут вызвать конфликты с целевым приложением.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]