C # перенаправить сетевые запросы - PullRequest
0 голосов
/ 15 ноября 2011

Я ищу хорошее решение о том, как перенаправить запросы сокетов.

Например, у меня есть один инструмент / приложение, которое пытается подключиться к 25.25.25.25:80, но. Мне нужно перенаправить все эти запросы на 54.54.54.54:80 (также запрос http).

Единственное решение, которое я знаю, это изменить файл "hosts" и переписать хост. Но в моем случае это не очень хорошее решение. Я не хочу изменять системные файлы пользователя. Я хочу изменить маршрут запроса, пока мое вторичное приложение работает. Если вы закроете его, первое приложение запросит исходный хост.

Возможно ли это сделать с помощью C #?

Ответы [ 4 ]

1 голос
/ 17 ноября 2011

Итак, основная цель этого - переписать ресурсы, используемые приложением.В моем случае это изображения.

Такой пример: есть приложение, которое требует от пользователя входа в систему (имя пользователя / пароль).После того, как пользователь зарегистрировал его, это приложение выбирает одно изображение (аватар), например, www.supersite.com/avatars/%username%.gif.Я не имею никакого влияния на www.supersite.com, и я не хочу взламывать ресурсы приложения, чтобы переписать URL.Цель второго приложения (которое мы пытаемся создать) состоит в том, чтобы прослушать http-вызов www.supersite.com/avatars/%username%.gif и переписать его на www.mysite.com/avatars/%username%..gif пока работает второе приложение.

Надеюсь, это был хороший пример.:)

1 голос
/ 15 ноября 2011

Напишите прокси-приложение, которое прослушивает 25.25.25.25:80 (HttpListener), перенаправляет каждый входящий запрос на 54.54.54.54:80 (например, WebClient) и отправляет ответ приложения, прослушивающего по последнему адресу.

РЕДАКТИРОВАТЬ:

Если у вас нет доступа к машине с адресом 25.25.25.25, и вы хотите решить проблему на клиентском компьютере, то выможно использовать WinPcap (используйте P / Invoke или одну из приятных оболочек .NET).Напишите приложение, которое имеет экземпляр pcap, который принимает каждый исходящий пакет с IP-адресом назначения 25.25.25.25 и портом TCP 80, переписывает адрес в 54.54.54.54, пересчитывает поле контрольной суммы заголовка TCP и отправляет пакет.Вам также понадобится другой экземпляр pcap, который принимает входящие TCP-пакеты с адресом источника 54.54.54.54, переписывает адрес в 25.25.25.25, пересчитывает поле контрольной суммы заголовка TCP и отправляет пакет.(После того, как я написал подобные программы, я уверен, что этот подход сработает. Возможно, вам придется использовать очереди, одну для входящих, одну для исходящих пакетов и несколько потоков.)

0 голосов
/ 15 ноября 2011

в моем случае это не очень хорошее решение.

Мне тоже так кажется.Было бы неплохо, если бы вы могли объяснить, чего вы пытаетесь достичь, возможно, кто-то еще столкнулся с той же проблемой, и есть более простое решение для нее.

В любом случае, в принципе, вы не можете этого сделать,если вы не используете какой-то прокси, на который вы можете повлиять.Где работает прокси-программа, которую вы хотите создать (далее: прокси)?И можете ли вы изменить инструмент, который выдает запрос (инструмент)?

Если ваш прокси-сервер работает на сервере 25.25.25.25, вы можете перехватить все входящие запросы на порт 80 и перенаправить его на 54.54.54.54, ноИсходный сервер не сможет работать (так как ваш прокси уже занимает порт 80), или наоборот.

Если прокси работает на клиенте, вам нужно разрешить инструменту подключиться к этому прокси (т.е. 127.0.0.1) и, скорее, запросить IP-адрес для подключения свозврат к адресу по умолчанию (25.25.25.25), если прокси-сервер не работает или не отвечает вовремя.

0 голосов
/ 15 ноября 2011

Должно быть возможно сделать это в C #.Здесь у вас есть то, что вы хотите, но исходный код - C ++.Тем не менее я думаю, что стоит посмотреть: http://www.quantumg.net/portforward.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...