Files
anti-syktsu-proxy/README.md

152 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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):
```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.