Есть ли какой-либо путь в C++ на окнах, чтобы контролировать программу и перенаправить какие-либо исходящие запросы, которые это выполняет на определенном порте? Я имею простого прокси HTTP C++ и хочу, чтобы он смог автоматически перенаправить все запросы браузера на порте 80 через себя.
Самый простой способ сделать это - создать обработчик ядра 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).
Если вы имеете в виду [любой порт назначения] к [одному порту], тогда вам придется полагаться на специальные драйверы. Проблема с окнами заключается в невозможности изначально блокировать [отбрасывать] пакеты. Например, обычным решением является winpcap. Однако, хотя вы можете отслеживать трафик, вы не можете остановить его или изменить его полезным образом.
В Windows единственное решение, которое я видел, - это использование некоторого открытого адаптера TUN / TAP . Благодаря этому вы сможете изменять каждый пакет, покидающий вашу систему.
Если вы заранее знаете, какой порт назначения вы будете использовать, то все становится довольно просто. Просто напишите сквозную программу сокета C ++, которая изменит только порт назначения.
Если вы хотите перенаправить запросы браузера, вы можете просто изменить настройки в своем браузере.
Программа должна быть запущена с административными привилегиями в режиме ядра операционной системы хоста.
Хотя у меня нет большого опыта работы с крюками ядра windows, в BSD и linux тривиально установить модуль ядра, который перезаписывает системные вызовы для создания сокетов и может легко перенаправить все сокеты на выбранный прокси-сокет.