Добавь README и бат скрипты

This commit is contained in:
2026-04-09 20:20:57 +03:00
parent 70b2495ad6
commit a9a6c304e7
4 changed files with 199 additions and 0 deletions

151
README.md Normal file
View File

@@ -0,0 +1,151 @@
# 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.