Добавь README и бат скрипты
This commit is contained in:
151
README.md
Normal file
151
README.md
Normal 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.
|
||||||
10
anti-syktsu-proxy.csproj
Normal file
10
anti-syktsu-proxy.csproj
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<Nullable>disable</Nullable>
|
||||||
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
|
<AssemblyName>anti-syktsu-proxy</AssemblyName>
|
||||||
|
<RootNamespace>AntiSyktsuProxy</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
17
build.bat
Normal file
17
build.bat
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
set "PROJECT=anti-syktsu-proxy.csproj"
|
||||||
|
set "RUNTIME=win-x64"
|
||||||
|
set "CONFIG=Release"
|
||||||
|
set "OUTDIR=publish\%RUNTIME%"
|
||||||
|
|
||||||
|
echo [build] Publishing %PROJECT%...
|
||||||
|
dotnet publish "%PROJECT%" -c %CONFIG% -r %RUNTIME% --self-contained false -o "%OUTDIR%"
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo [build] FAILED
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [build] OK: %OUTDIR%\anti-syktsu-proxy.exe
|
||||||
|
exit /b 0
|
||||||
21
run.bat
Normal file
21
run.bat
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
set "EXE=publish\win-x64\anti-syktsu-proxy.exe"
|
||||||
|
|
||||||
|
if not exist "%EXE%" (
|
||||||
|
echo [run] EXE not found: %EXE%
|
||||||
|
echo [run] Run build.bat first.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
set "UPSTREAM_PROXY=proxy.syktsu.ru:3128"
|
||||||
|
set "UPSTREAM_USER=%USERDOMAIN%\%USERNAME%"
|
||||||
|
set "UPSTREAM_PASS="
|
||||||
|
|
||||||
|
echo [run] UPSTREAM_PROXY=%UPSTREAM_PROXY%
|
||||||
|
echo [run] UPSTREAM_USER=%UPSTREAM_USER%
|
||||||
|
echo [run] UPSTREAM_PASS is empty
|
||||||
|
echo [run] Starting proxy...
|
||||||
|
|
||||||
|
"%EXE%"
|
||||||
Reference in New Issue
Block a user