woonem
@woonem

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

Что написать на C#, чтобы при работе скомпилированной программы весь трафик в ОС шел через прокси?
Программа должна перенаправлять трафик через себя в прокси.
Это связанно с тем, что на прокси используется система шифрования и чтобы пользоваться прокси необходимо на стороне клиента иметь (де)шифратор, то есть программа должна пропускать весь трафик через себя.
Конечно, можно запустить сервер на клиенте, который будет выступать прокси, в настройках прокси прописать адрес локального сервера, а этот сервер будет (де)шифровать данные и отправлять/получать на удалённый прокси.
Но не хочется писать сервер (я не уверен, на сколько это трудозатратно, ещё новичок в C#), и хочется, чтоб всё работало без настройки.
На всякий случай скажу, что выделенного IP адреса у прокси нет, есть только домен (из-за ограничений NAT хостинга).
  • Вопрос задан
  • 3958 просмотров
Решения вопроса 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 у целевого процесса, заменяя их на свои функции. Вариант интересный, но ИМХО менее надежный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы