first commit

This commit is contained in:
Александр Ебаклаков
2026-04-06 14:07:11 +03:00
commit 9a2f1387f9
13 changed files with 1758 additions and 0 deletions

129
README.md Normal file
View File

@@ -0,0 +1,129 @@
# 🌐 Proxy Switcher
**Кроссплатформенный прозрачный прокси** — направляет **100% трафика ОС** через заданный прокси-сервер с помощью TUN-интерфейса и [tun2socks](https://github.com/xjasonlyu/tun2socks).
> В отличие от системных настроек прокси (которые игнорируются играми, CLI-утилитами, фоновыми сервисами), proxy-switcher работает на уровне сетевого стека ОС — перехватывает **весь** трафик, включая TCP и UDP.
## ⚡ Быстрый старт
### 1. Скачайте tun2socks
```bash
# macOS (Apple Silicon)
curl -L -o tun2socks.zip https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-darwin-arm64.zip
unzip tun2socks.zip && mv tun2socks-darwin-arm64 bin/ && rm tun2socks.zip
# macOS (Intel)
curl -L -o tun2socks.zip https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-darwin-amd64.zip
unzip tun2socks.zip && mv tun2socks-darwin-amd64 bin/ && rm tun2socks.zip
# Windows — скачайте архив и wintun.dll:
# https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-windows-amd64.zip
# Извлеките tun2socks-windows-amd64.exe в папку bin/
# https://www.wintun.net/ → извлеките wintun.dll в папку bin/
```
### 2. Запустите
```bash
# macOS / Linux (требует sudo)
sudo python -m src.main --proxy socks5://your-proxy-server:1080
# С авторизацией
sudo python -m src.main --proxy socks5://user:password@proxy:1080
# HTTP прокси
sudo python -m src.main --proxy http://proxy:8080
# Тестовый режим (показывает команды, не выполняет)
sudo python -m src.main --proxy socks5://proxy:1080 --dry-run
```
### 3. Отключение
Нажмите `Ctrl+C` — все маршруты автоматически восстановятся.
## 🏗 Архитектура
```
┌──────────────────────────────────────────────────────┐
│ Python Manager (main.py) │
│ ┌─────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ Privile-│ │ Network │ │ Platform │ │
│ │ ges │ │ Utils │ │ Router (ABC) │ │
│ │ check │ │ (gateway │ │ ┌────────────┐ │ │
│ │ │ │ detection) │ │ │macOS Router│ │ │
│ └─────────┘ └──────────────┘ │ │Win Router │ │ │
│ │ └────────────┘ │ │
│ ┌──────────────────────────┐ └────────────────┘ │
│ │ Tun2socks Manager │ │
│ │ (subprocess lifecycle) │ │
│ └────────────┬─────────────┘ │
└───────────────┼──────────────────────────────────────┘
│ subprocess
┌───────────▼───────────┐
│ tun2socks binary │
│ (Go + gVisor stack) │
│ ┌─────────────────┐ │
│ │ TUN Interface │◄─── All OS traffic
│ │ (utun / wintun) │ │
│ └────────┬────────┘ │
│ │ IP→SOCKS │
│ ┌────────▼────────┐ │
│ │ Proxy Server │──── Internet
│ └─────────────────┘ │
└───────────────────────┘
```
## 📋 CLI-параметры
| Параметр | Описание | По умолчанию |
|---|---|---|
| `--proxy`, `-p` | URL прокси (обязательный) | — |
| `--tun-name` | Имя TUN-интерфейса | `utun123` (macOS) / `wintun` (Windows) |
| `--tun-ip` | IP-адрес TUN | `198.18.0.1` (macOS) / `192.168.123.1` (Win) |
| `--dns` | DNS-серверы | `8.8.8.8 8.8.4.4` |
| `--interface`, `-i` | Основной интерфейс ОС | auto-detect |
| `--log-level`, `-l` | Уровень логов | `info` |
| `--dry-run` | Только показать команды | `false` |
## 🔒 Требования
- **Python** 3.8+
- **Права root/Administrator** (создание TUN + маршруты)
- **tun2socks** binary в `bin/` или PATH
- **Windows**: дополнительно `wintun.dll`
## 📁 Структура проекта
```
proxy-switcher/
├── bin/ # Бинарники tun2socks (скачиваются)
├── src/
│ ├── __init__.py
│ ├── main.py # CLI + оркестратор
│ ├── config.py # Конфигурация (dataclass)
│ ├── privileges.py # Проверка прав admin/root
│ ├── network_utils.py # Детекция шлюза + DNS resolve
│ ├── platform_router.py # Абстракция маршрутизации
│ ├── macos_router.py # macOS: ifconfig + route
│ ├── windows_router.py # Windows: netsh
│ └── tun2socks_manager.py # Управление процессом tun2socks
├── requirements.txt
└── README.md
```
## ⚠ Важные ограничения
1. **Прокси не на localhost**: Прокси-сервер должен быть на удалённом хосте. Если прокси на `127.0.0.1`, возникнет routing loop.
2. **Один экземпляр**: Не запускайте несколько экземпляров одновременно.
3. **Graceful shutdown**: Всегда используйте `Ctrl+C` для корректного отключения. При аварийном завершении маршруты могут остаться в ОС.
## 📜 Лицензия
MIT
## 📝 TODO
- [ ] Добавить отдельные CLI флаги `--user` и `--password` для прокси с авторизацией (сейчас поддерживается через передачу параметров внутри `--proxy URL`).
- [ ] Добавить скрипт или команду для автоматического скачивания нужного бинарника `tun2socks` под текущую ОС и архитектуру.