C ++ перенаправить исходящие соединения - PullRequest
5 голосов
/ 06 февраля 2010

Есть ли способ в C ++ для Windows контролировать программу и перенаправлять любые исходящие запросы, которые она делает на конкретный порт? У меня есть простой C ++ http-прокси, и я хочу, чтобы он мог автоматически перенаправлять все запросы браузера через порт 80 через себя.

Ответы [ 3 ]

5 голосов
/ 07 февраля 2010

Простой способ сделать это - создать хук ядра Windows, чтобы перехватывать запросы сокетов и перенаправлять их на ваш прокси.

Некоторая полезная документация по этому вопросу:

http://www.internals.com/articles/apispy/apispy.htm

Если вы используете Windows Vista или выше, рассмотрите платформу фильтрации Windows (WFP):

http://www.microsoft.com/whdc/device/network/wfp.mspx

Также обратите внимание на Объезд (коммерческий) и EasyHook (бесплатный). Они значительно упрощают процесс написания хуков и перенаправления вызовов API (как Win32, так и Application).

1 голос
/ 07 февраля 2010

Если вы имеете в виду [любой порт назначения] для [один порт], то вам придется полагаться на специальные драйверы. Проблема с окнами заключается в невозможности изначально блокировать [отбрасывать] пакеты. Например, распространенным решением является winpcap. Однако, хотя вы можете отслеживать трафик, вы не можете остановить трафик или изменить его полезным способом.

В Windows единственным решением, которое я видел, было бы использование открытого адаптера TUN / TAP . При этом вы сможете изменять каждый пакет, который покидает вашу систему.

Если вы заранее знаете, какой порт назначения вы будете использовать, тогда все будет довольно просто. Просто напишите сквозную программу для сокетов C ++, которая изменит только порт назначения.

Если вы хотите перенаправить запросы браузера, вы можете просто отредактировать настройки в вашем браузере.

0 голосов
/ 07 февраля 2010

Программа должна запускаться с правами администратора в режиме ядра хост-ОС.

Хотя у меня нет большого опыта работы с хуками ядра Windows, в BSD и Linux тривиально установить модуль ядра, который перезаписывает системные вызовы для создания сокетов и может легко перенаправить все сокеты на выбранный прокси-сокет.

...