Задать вопрос
woonem
@woonem

Как перехватывать весь трафик и перенаправлять на прокси в C# или С++ (пишу в VS)?

Что написать на C#, чтобы при работе скомпилированной программы весь трафик в ОС шел через прокси?
Программа должна перенаправлять трафик через себя в прокси.
Это связанно с тем, что на прокси используется система шифрования и чтобы пользоваться прокси необходимо на стороне клиента иметь (де)шифратор, то есть программа должна пропускать весь трафик через себя.
Конечно, можно запустить сервер на клиенте, который будет выступать прокси, в настройках прокси прописать адрес локального сервера, а этот сервер будет (де)шифровать данные и отправлять/получать на удалённый прокси.
Но не хочется писать сервер (я не уверен, на сколько это трудозатратно, ещё новичок в C#), и хочется, чтоб всё работало без настройки.
На всякий случай скажу, что выделенного IP адреса у прокси нет, есть только домен (из-за ограничений NAT хостинга).
  • Вопрос задан
  • 4138 просмотров
Подписаться Оценить Комментировать
Решения вопроса 2
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
c# в данном случае просто выполняет настройку ОС не более
вот эти действия (редактирование реестра)
stackoverflow answer
надо в код перевести
Ответ написан
Nipheris
@Nipheris Куратор тега C++
Вадим Егоров
> подключение к прокси при настройке через панель управления осуществляется по протоколу HTTP
Конечно по HTTP, под "прокси" обычно и понимают как раз таки HTTP-прокси. Если вам нужно перенаправлять ЛЮБЫЕ TCP-соединения, т.е. в том числе те, которые не имеют вообще никакого отношения к HTTP (например, SMTP), то тогда обычно пользуются соксами (https://en.wikipedia.org/wiki/SOCKS), а если программа сама не умеет инкапсулировать трафик в этот протокол - то используют соксификатор, например такой www.freecap.ru .
Нужен ли вам socks или нет - это зависит от того, что у вас там за прокси. Я еще раз отмечу, что не понимаю, что это за сервер такой, что он шифрует и по какому протоколу работает. Если это ваш собственный протокол, то тогда у вас два пути:
1) вы пишете локальный socks-прокси, направляете программы через него (путем настройки программы или путем насильственной соксификации), а он уже шифрует трафик как вам надо и общается с УДАЛЕННЫМ прокси по ВАШЕМУ протоколу
2) вы пишете аналог соксификатора, т.к. программу, которая будет форсировать передачу трафика через себя, и также будет шифровать его и направлять по ВАШЕМУ протоколу на удаленный прокси. Тогда вам скорее всего и придется разбираться с перехватом пакетов. Самым простым вариантом будет использование WinPcap - тогда не нужно будет работать в режиме ядра (это не самая простая вещь на свете), плюс в современных версиях этой же либой можно и отправлять пакеты: www.winpcap.org/docs/docs_412/html/group__wpcap__t... . FreeCap реализует иной подход - он перехватывает вызовы Winsock API у целевого процесса, заменяя их на свои функции. Вариант интересный, но ИМХО менее надежный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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