213 lines
6.7 KiB
Markdown
213 lines
6.7 KiB
Markdown
# TG WS Proxy Go
|
||
|
||
[](go.mod)
|
||
[](LICENSE)
|
||
[](https://github.com/y0sy4/tg-ws-proxy-go/releases)
|
||
|
||
> **Go-переосмысление** [Flowseal/tg-ws-proxy](https://github.com/Flowseal/tg-ws-proxy)
|
||
|
||
**Локальный SOCKS5-прокси для Telegram Desktop на Go**
|
||
|
||
Ускоряет работу Telegram через WebSocket-соединения напрямую к серверам Telegram.
|
||
|
||
## Почему Go версия лучше
|
||
|
||
| Параметр | Python | Go |
|
||
|----------|--------|-----|
|
||
| Размер | ~50 MB | **~8 MB** |
|
||
| Зависимости | pip (много) | **stdlib** |
|
||
| Время запуска | ~500 ms | **~50 ms** |
|
||
| Потребление памяти | ~50 MB | **~10 MB** |
|
||
|
||
## Быстрый старт
|
||
|
||
### Установка
|
||
|
||
```bash
|
||
# Скачать готовый бинарник из Releases
|
||
# Или собрать из исходников
|
||
go build -o TgWsProxy.exe ./cmd/proxy
|
||
```
|
||
|
||
### Запуск
|
||
|
||
```bash
|
||
# Windows
|
||
start run.bat
|
||
|
||
# Windows с авто-настройкой Telegram
|
||
TgWsProxy.exe --auto-config
|
||
|
||
# Linux/macOS
|
||
./TgWsProxy
|
||
|
||
# С опциями
|
||
./TgWsProxy --port 9050 --dc-ip 2:149.154.167.220
|
||
```
|
||
|
||
## Настройка Telegram Desktop
|
||
|
||
### Автоматическая настройка
|
||
|
||
При первом запуске прокси автоматически предложит настроить Telegram (Windows).
|
||
|
||
Или откройте ссылку в браузере:
|
||
```
|
||
tg://socks?server=127.0.0.1&port=1080
|
||
```
|
||
|
||
### Ручная настройка
|
||
|
||
1. **Настройки** → **Продвинутые** → **Тип подключения** → **Прокси**
|
||
2. Добавить прокси:
|
||
- **Тип:** SOCKS5
|
||
- **Сервер:** `127.0.0.1`
|
||
- **Порт:** `1080`
|
||
- **Логин/Пароль:** пусто (или ваши данные если используете `--auth`)
|
||
|
||
Или откройте ссылку: `tg://socks?server=127.0.0.1&port=1080`
|
||
|
||
## Командная строка
|
||
|
||
```bash
|
||
./TgWsProxy [опции]
|
||
|
||
Опции:
|
||
--port int Порт SOCKS5 (default 1080)
|
||
--host string Хост SOCKS5 (default "127.0.0.1")
|
||
--dc-ip string DC:IP через запятую (default "2:149.154.167.220,4:149.154.167.220")
|
||
--auth string SOCKS5 аутентификация (username:password)
|
||
--auto-config Авто-настройка Telegram Desktop при запуске
|
||
-v Подробное логирование
|
||
--log-file string Путь к файлу логов
|
||
--log-max-mb float Макс. размер логов в МБ (default 5)
|
||
--buf-kb int Размер буфера в КБ (default 256)
|
||
--pool-size int Размер WS пула (default 4)
|
||
--version Показать версию
|
||
```
|
||
|
||
### Примеры
|
||
|
||
```bash
|
||
# Без аутентификации
|
||
./TgWsProxy -v
|
||
|
||
# С аутентификацией (защита от несанкционированного доступа)
|
||
./TgWsProxy --auth "myuser:mypassword"
|
||
|
||
# Настройка DC
|
||
./TgWsProxy --dc-ip "2:149.154.167.220,4:149.154.167.220"
|
||
```
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
tg-ws-proxy/
|
||
├── cmd/
|
||
│ └── proxy/ # CLI приложение
|
||
├── internal/
|
||
│ ├── proxy/ # Ядро прокси
|
||
│ ├── socks5/ # SOCKS5 сервер
|
||
│ ├── websocket/ # WebSocket клиент
|
||
│ ├── mtproto/ # MTProto парсинг
|
||
│ └── config/ # Конфигурация
|
||
├── go.mod
|
||
├── Makefile
|
||
└── README.md
|
||
```
|
||
|
||
## Сборка
|
||
|
||
```bash
|
||
# Все платформы
|
||
make all
|
||
|
||
# Конкретная платформа
|
||
make windows # Windows (.exe)
|
||
make linux # Linux (amd64)
|
||
make darwin # macOS Intel + Apple Silicon
|
||
make android # Android (.aar библиотека)
|
||
```
|
||
|
||
### Поддерживаемые платформы
|
||
|
||
| Платформа | Архитектуры | Статус |
|
||
|-----------|-------------|--------|
|
||
| Windows | x86_64 | ✅ Готово |
|
||
| Linux | x86_64 | ✅ Готово |
|
||
| macOS | Intel + Apple Silicon | ✅ Готово |
|
||
| Android | arm64, arm, x86_64 | 📝 См. [android/README.md](android/README.md) |
|
||
| iOS | arm64 | 🚧 В планах |
|
||
|
||
**macOS Catalina (10.15)** — поддерживается! Используйте `TgWsProxy_macos_amd64`.
|
||
|
||
## Конфигурация
|
||
|
||
Файл конфигурации:
|
||
|
||
- **Windows:** `%APPDATA%/TgWsProxy/config.json`
|
||
- **Linux:** `~/.config/TgWsProxy/config.json`
|
||
- **macOS:** `~/Library/Application Support/TgWsProxy/config.json`
|
||
|
||
```json
|
||
{
|
||
"port": 1080,
|
||
"host": "127.0.0.1",
|
||
"dc_ip": [
|
||
"1:149.154.175.50",
|
||
"2:149.154.167.220",
|
||
"3:149.154.175.100",
|
||
"4:149.154.167.220",
|
||
"5:91.108.56.100"
|
||
],
|
||
"verbose": false,
|
||
"log_max_mb": 5,
|
||
"buf_kb": 256,
|
||
"pool_size": 4
|
||
}
|
||
```
|
||
|
||
## Особенности
|
||
|
||
- ✅ **WebSocket pooling** — пул соединений для уменьшения задержек
|
||
- ✅ **TCP fallback** — автоматическое переключение при недоступности WS
|
||
- ✅ **MTProto парсинг** — извлечение DC ID из init-пакета
|
||
- ✅ **SOCKS5** — полная поддержка RFC 1928
|
||
- ✅ **Логирование** — с ротацией файлов
|
||
- ✅ **Zero-copy** — оптимизированные операции с памятью
|
||
|
||
## 📱 Планы развития
|
||
|
||
- [ ] **Android APK** — нативное приложение с фоновой службой
|
||
- [ ] **iOS App** — Swift обёртка вокруг Go ядра
|
||
- [ ] **GUI для desktop** — системный трей для Windows/macOS/Linux
|
||
|
||
## Производительность
|
||
|
||
| Метрика | Значение |
|
||
|---------|----------|
|
||
| Размер бинарника | ~8 MB |
|
||
| Потребление памяти | ~10 MB |
|
||
| Время запуска | <100 ms |
|
||
| Задержка (pool hit) | <1 ms |
|
||
|
||
## Требования
|
||
|
||
- **Go 1.21+** для сборки
|
||
- **Windows 7+** / **macOS 10.15+** / **Linux x86_64**
|
||
- **Telegram Desktop** для использования
|
||
|
||
## Известные ограничения
|
||
|
||
1. **IPv6** — поддерживается через IPv4-mapped адреса (::ffff:x.x.x.x) и NAT64
|
||
2. **DC3 WebSocket** — может быть недоступен в некоторых регионах
|
||
|
||
## Лицензия
|
||
|
||
MIT License
|
||
|
||
## Ссылки
|
||
|
||
- [Оригинальный проект на Python](https://github.com/Flowseal/tg-ws-proxy)
|
||
- [Документация Go](https://go.dev/)
|