Добавить agents.md
This commit is contained in:
175
agents.md
Normal file
175
agents.md
Normal file
@@ -0,0 +1,175 @@
|
||||
# AGENTS.md
|
||||
|
||||
## 🎯 Цель проекта
|
||||
|
||||
Разработка локального HTTP/HTTPS прокси-сервера на Windows, который:
|
||||
|
||||
* использует системные proxy-настройки (включая PAC/WPAD)
|
||||
* поднимает локальный proxy (127.0.0.1:PORT)
|
||||
* требует Basic-аутентификацию
|
||||
* проксирует весь трафик через системный proxy (upstream)
|
||||
* работает в оффлайн/ограниченной среде
|
||||
|
||||
---
|
||||
|
||||
## 🧱 Текущий стек
|
||||
|
||||
* Язык: C#
|
||||
* Платформа: .NET 6+
|
||||
* ОС: Windows
|
||||
* Используемые API:
|
||||
|
||||
* WinHTTP (`WinHttpGetProxyForUrl`)
|
||||
* TcpListener / TcpClient
|
||||
* низкоуровневый HTTP parsing
|
||||
|
||||
---
|
||||
|
||||
## ✅ Уже реализовано
|
||||
|
||||
* Локальный proxy сервер (TCP)
|
||||
* Поддержка HTTP
|
||||
* Поддержка HTTPS через CONNECT (туннель)
|
||||
* Basic Proxy Authentication
|
||||
* Чтение системного proxy через WinHTTP
|
||||
* Поддержка PAC/WPAD (через WinHttpGetProxyForUrl)
|
||||
* Проксирование через upstream proxy
|
||||
* Двунаправленный стриминг (Pump)
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Известные проблемы / ограничения
|
||||
|
||||
### ❗ 1. Упрощённый HTTP parser
|
||||
|
||||
* читает только первый пакет (8192 байт)
|
||||
* не обрабатывает:
|
||||
|
||||
* chunked encoding (входящий)
|
||||
* большие POST body
|
||||
* keep-alive корректно
|
||||
|
||||
---
|
||||
|
||||
### ❗ 2. Нет полноценной обработки proxy auth upstream
|
||||
|
||||
* если upstream требует:
|
||||
|
||||
* NTLM / Kerberos → частично работает через WinHTTP
|
||||
* Basic → не всегда прокидывается
|
||||
|
||||
---
|
||||
|
||||
### ❗ 3. Нет connection pooling
|
||||
|
||||
* каждое соединение → новый TcpClient
|
||||
|
||||
---
|
||||
|
||||
### ❗ 4. Нет логирования
|
||||
|
||||
* сложно дебажить поведение
|
||||
|
||||
---
|
||||
|
||||
### ❗ 5. Нет таймаутов / retry
|
||||
|
||||
* возможны зависания
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Следующие задачи (приоритет)
|
||||
|
||||
### 🔥 HIGH
|
||||
|
||||
* [ ] Полный HTTP parser (или перейти на HttpListener/Kestrel)
|
||||
* [ ] Корректная работа с большими body (streaming request)
|
||||
* [ ] Обработка chunked encoding
|
||||
* [ ] Таймауты на сокеты
|
||||
|
||||
---
|
||||
|
||||
### ⚙️ MEDIUM
|
||||
|
||||
* [ ] Логирование (запросы, ошибки)
|
||||
* [ ] Ограничение количества соединений
|
||||
* [ ] Graceful shutdown
|
||||
|
||||
---
|
||||
|
||||
### 🚀 ADVANCED
|
||||
|
||||
* [ ] Connection pooling
|
||||
* [ ] Кеширование CONNECT туннелей
|
||||
* [ ] Поддержка SOCKS5
|
||||
* [ ] MITM HTTPS (с генерацией сертификатов)
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Как тестировать
|
||||
|
||||
### curl
|
||||
|
||||
curl -x http://user:pass@127.0.0.1:8888 http://example.com
|
||||
|
||||
### HTTPS
|
||||
|
||||
curl -x http://user:pass@127.0.0.1:8888 https://example.com -k
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Типичные ошибки
|
||||
|
||||
### "vite not executable"
|
||||
|
||||
→ проблема несовместимости node_modules (macOS → Windows)
|
||||
|
||||
### "Proxy 407"
|
||||
|
||||
→ не передан Proxy-Authorization
|
||||
|
||||
### "502 Bad Gateway"
|
||||
|
||||
→ upstream proxy не принял CONNECT
|
||||
|
||||
### timeout
|
||||
|
||||
→ проблема с PAC / WinHTTP / сетью
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Важные знания
|
||||
|
||||
* node_modules нельзя переносить между ОС
|
||||
* WinHTTP ≠ WinINET (разные API)
|
||||
* PAC требует WinHttpGetProxyForUrl
|
||||
* CONNECT = raw TCP tunnel
|
||||
* Proxy chaining ломается без правильного handshake
|
||||
|
||||
---
|
||||
|
||||
## 📌 Контекст пользователя
|
||||
|
||||
* Работает в оффлайн/ограниченной сети
|
||||
* Нужен полный контроль над proxy
|
||||
* Использует Windows
|
||||
* Требуется системная интеграция proxy
|
||||
|
||||
---
|
||||
|
||||
## 📎 Дальнейшее развитие
|
||||
|
||||
Если продолжать:
|
||||
|
||||
* перейти на async socket server с IOCP
|
||||
* добавить полноценный HTTP stack
|
||||
* или встроить готовый proxy engine (YARP / Kestrel)
|
||||
|
||||
---
|
||||
|
||||
## 💬 Примечание
|
||||
|
||||
Это инженерный прототип прокси.
|
||||
Не production-ready, но уже близко к рабочему инструменту.
|
||||
|
||||
Любые дальнейшие доработки — ориентироваться на реальные ошибки в сети.
|
||||
Reference in New Issue
Block a user