# anti-syktsu-proxy Локальный HTTP/HTTPS proxy-сервер для Windows: - принимает подключения на `127.0.0.1:8888` (с Basic auth), - проксирует трафик через системный upstream proxy (PAC/WPAD/IE/WinHTTP), - поддерживает принудительный upstream через `UPSTREAM_PROXY`, - логирует подключения и ошибки в консоль. Проект предназначен для сценария: `приложение -> локальный proxy -> корпоративный proxy (например CNTLM/AD)`. ## Требования - Windows 10/11 или Windows Server - .NET SDK 6.0+ (для сборки) - Доступ к корпоративному proxy (например `proxy.syktsu.ru:3128`) Важно: проект использует WinHTTP API (`winhttp.dll`), поэтому запуск только на Windows. ## Быстрый старт 1. Клонировать репозиторий. 2. Открыть `cmd`/PowerShell в папке проекта. 3. (Опционально, рекомендуется) задать принудительный upstream proxy. 4. Запустить `dotnet run` или собрать `.exe` через `dotnet publish`. ## Конфигурация ### 1) Локальная авторизация клиента (вход в локальный proxy) Сейчас логин/пароль захардкожены в `Program.cs`: - `user` - `pass` Их использует клиент при подключении к `127.0.0.1:8888`. ### 2) Upstream proxy (корпоративный) Рекомендуемый режим для стабильной работы в закрытой сети: - `UPSTREAM_PROXY` - адрес корпоративного proxy (например `proxy.syktsu.ru:3128`) - `UPSTREAM_USER` - логин для upstream proxy (если нужен) - `UPSTREAM_PASS` - пароль для upstream proxy (если нужен) Если `UPSTREAM_PROXY` задан, он имеет приоритет и используется для всех запросов. Пример (cmd): ```bat set UPSTREAM_PROXY=proxy.syktsu.ru:3128 set UPSTREAM_USER=my_user set UPSTREAM_PASS=my_password ``` Если `UPSTREAM_PROXY` не задан, приложение пытается резолвить системный proxy через WinHTTP/IE config (PAC/WPAD/static). ## Запуск из исходников ```bat dotnet run --project anti-syktsu-proxy.csproj ``` ## Сборка `.exe` ### Framework-dependent (меньше размер, нужен установленный .NET Runtime) ```bat dotnet publish anti-syktsu-proxy.csproj -c Release -r win-x64 --self-contained false -o .\publish\win-x64 ``` Файл: `.\publish\win-x64\anti-syktsu-proxy.exe` ### Self-contained (больше размер, .NET Runtime на машине не нужен) ```bat dotnet publish anti-syktsu-proxy.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o .\publish\win-x64-sc ``` Файл: `.\publish\win-x64-sc\anti-syktsu-proxy.exe` ## Использование в клиентах Указывайте в приложениях локальный proxy: - `http://user:pass@127.0.0.1:8888` Примеры проверки: ```bat curl -x http://user:pass@127.0.0.1:8888 http://example.com -v curl -x http://user:pass@127.0.0.1:8888 https://example.com -k -v ``` ## Что логируется - старт сервера и адрес прослушивания - входящие подключения (`[conn:N] accepted`) - метод/target (`CONNECT ...`, `GET ...`) - выбранный upstream proxy - ошибки парсинга, сети, WinHTTP - закрытие соединения ## Типовые проблемы ### `WinHttpGetProxyForUrl failed ... (Win32=12006)` Обычно проблема PAC URL (часто `file://...`) или недоступность auto-proxy в текущей среде. Решение: задать `UPSTREAM_PROXY` явно. ### `502 Bad Gateway` Локальный proxy не смог подключиться к upstream или upstream отклонил CONNECT. Проверьте `UPSTREAM_PROXY`, сетевую доступность и auth (`UPSTREAM_USER/PASS`). ### `407 Proxy Authentication Required` от upstream Нужны корректные `UPSTREAM_USER`/`UPSTREAM_PASS` (или внешняя авторизация, например CNTLM). ### `stream closed` / `operation aborted` Часто это штатное закрытие одной стороны туннеля. Смотрите соседние строки лога по тому же `conn:N`: там обычно есть первичная причина (`407/403/502`, таймаут, reset и т.д.). ## Полезные команды Windows Показать WinHTTP proxy: ```bat netsh winhttp show proxy ``` Сбросить WinHTTP proxy: ```bat netsh winhttp reset proxy ``` ## Ограничения прототипа - упрощенный HTTP parser (первые 8192 байт) - нет полноценного streaming больших body/chunked - нет connection pooling - нет graceful shutdown Проект инженерный, ориентирован на диагностику и контролируемый proxy-chaining.