5.4 KiB
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.
Быстрый старт
- Клонировать репозиторий.
- Открыть
cmd/PowerShell в папке проекта. - (Опционально, рекомендуется) задать принудительный upstream proxy.
- Запустить
dotnet runили собрать.exeчерезdotnet publish.
Конфигурация
1) Локальная авторизация клиента (вход в локальный proxy)
Сейчас логин/пароль захардкожены в Program.cs:
userpass
Их использует клиент при подключении к 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):
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).
Запуск из исходников
dotnet run --project anti-syktsu-proxy.csproj
Сборка .exe
Framework-dependent (меньше размер, нужен установленный .NET Runtime)
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 на машине не нужен)
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
Примеры проверки:
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:
netsh winhttp show proxy
Сбросить WinHTTP proxy:
netsh winhttp reset proxy
Ограничения прототипа
- упрощенный HTTP parser (первые 8192 байт)
- нет полноценного streaming больших body/chunked
- нет connection pooling
- нет graceful shutdown
Проект инженерный, ориентирован на диагностику и контролируемый proxy-chaining.