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 5.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):

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.

Description
No description provided
Readme 179 KiB
Languages
C# 97.9%
Batchfile 2.1%