Skip to content

Latest commit

 

History

History
130 lines (94 loc) · 11.8 KB

File metadata and controls

130 lines (94 loc) · 11.8 KB

MTProto Hub Banner

MTProto Hub

Android Kotlin License: MIT

MTProto Hub — это Android-приложение, которое загружает ссылки на MTProto-прокси, проверяет их работоспособность, сохраняет результаты в локальную базу данных и предоставляет локальную ссылку tg://proxy для Telegram. Приложение также может запускать фоновую службу, которая ретранслирует и перекодирует трафик через выбранный работающий прокси.

Этот репозиторий представляет собой практическую кодовую базу на Android/Kotlin, а не клиент Telegram. Его задача — управлять источниками прокси, ранжировать работающие прокси, действовать как активный крипто-шлюз MTProto и предоставлять Telegram локальную конечную точку для подключения.

Установка и обновления

Начиная с версии 1.1.1, вам больше не нужно собирать проект из исходников для использования приложения. Предварительно скомпилированные стабильные APK-файлы доступны для прямого скачивания.

  1. Перейдите в раздел Releases этого репозитория GitHub.
  2. Скачайте последний .apk-файл из приложенных файлов релиза.
  3. Установите APK на своё Android-устройство (возможно, потребуется разрешить установку из неизвестных источников в настройках устройства).

Обновление приложения: Чтобы обновить приложение до новой версии, просто скачайте последний релизный APK и установите его поверх текущей установки. Все ваши настройки, списки прокси, пользовательские секреты и записи локальной базы данных будут автоматически сохранены. Вы также можете использовать встроенную проверку обновлений, если она включена в настройках.

Что оно делает

  • загружает списки прокси с настраиваемого удалённого URL
  • разбирает ссылки вида tg://proxy и https://t.me/proxy
  • проверяет прокси с помощью TCP-подключений
  • хранит данные прокси и логи в Room
  • ранжирует прокси по баллам, задержке и проценту успешных проверок
  • поддерживает статические пользовательские или генерируемые на устройстве MTProto-секреты
  • запускает локальную фоновую службу на 127.0.0.1 и действует как крипто-шлюз, преобразуя локальный трафик для вышестоящих серверов
  • экспортирует как исходную ссылку на прокси, так и локальную ссылку для Telegram
  • показывает логи, подключённых клиентов, настройки и простую справку

Основной процесс

  1. Приложение загружает источник прокси из Настроек.
  2. ProxyManager загружает и разбирает список.
  3. ProxyChecker проверяет каждый прокси и обновляет его статус.
  4. Лучший работающий прокси отображается в интерфейсе.
  5. LocalProxyService слушает на локальном порту. Он принимает входящий трафик Telegram, используя статический локальный секрет, расшифровывает его, повторно шифрует с помощью секрета удалённого прокси и отправляет дальше.
  6. Telegram подключается к локальной ссылке tg://proxy вместо прямого использования удалённого прокси, обеспечивая стабильное соединение даже при смене фонового прокси.

Структура проекта

  • app/src/main/java/com/example/MainActivity.kt — точка входа и оболочка Compose
  • app/src/main/java/com/example/ui/ — экраны, навигация и ViewModel
  • app/src/main/java/com/example/proxy/ — разбор, проверка и логика обновления
  • app/src/main/java/com/example/service/ — локальная ретрансляционная фоновая служба и логика крипто-шлюза
  • app/src/main/java/com/example/data/ — база данных Room, DAO, сетевой клиент и хранилище настроек
  • app/src/main/java/com/example/models/ — сущности прокси и логов
  • app/src/main/java/com/example/utils/ — криптографические утилиты и генерация секрета устройства

Требования

  • Android Studio с поддержкой Kotlin/Compose (для сборки из исходников)
  • Android SDK 24 или новее
  • Доступ в интернет для получения источника прокси
  • URL источника прокси, возвращающий обычные текстовые строки с валидными ссылками на прокси

Сборка и запуск (для разработчиков)

  1. Откройте проект в Android Studio.
  2. Синхронизируйте Gradle.
  3. Запустите вариант debug или release на устройстве или эмуляторе.
  4. Откройте приложение и нажмите Загрузить сейчас или Проверить пинги.
  5. Запустите шлюз с главного экрана.
  6. Скопируйте локальную ссылку tg://proxy и вставьте её в Telegram.

Примечания для разработки

  • Приложение использует Jetpack Compose, Room, Ktor и корутины.
  • Данные прокси хранятся в локальной базе данных Room.
  • Логирование проходит через Timber, а также записывается в таблицу logs.
  • LocalProxyService является фоновой службой, поэтому Android может показывать постоянное уведомление, пока она работает.
  • Подпись релиза считывает значения из переменных окружения, определённых в app/build.gradle.kts.

С чего начать при изменении кода

  • Поведение интерфейса: ui/home, ui/proxies, ui/settings
  • Загрузка источников и ранжирование: proxy/ProxyManager.kt
  • Проверка прокси: proxy/ProxyChecker.kt
  • Локальная ретрансляция и криптологика: service/LocalProxyService.kt, utils/MtprotoCipher.kt
  • Сохраняемые настройки: data/SettingsRepository.kt
  • Схема и запросы: data/AppDatabase.kt, data/ProxyDao.kt, data/LogDao.kt

Сообщение о проблемах

Если вы нашли ошибку, хотите предложить новую функцию или заметили что-то отсутствующее, пожалуйста, откройте issue в трекере репозитория.

Чтобы помочь быстро решить проблему, хороший отчёт об ошибке должен включать:

  • Краткое, описательное название
  • Версию Android и точную модель устройства
  • Версию приложения или конкретный хэш коммита
  • Пошаговые инструкции для воспроизведения проблемы
  • Что вы ожидали увидеть
  • Что произошло на самом деле
  • Соответствующие логи из экрана логов приложения
  • Скриншоты (если проблема связана с интерфейсом)
  • Используемый URL источника (если ошибка зависит от фида прокси)

Пожалуйста, сосредоточьте отчёт на одной конкретной проблеме. Если у вас есть несколько различных ошибок, создайте отдельные issues для каждой.

Участие в разработке

Вклад приветствуется и ценится. Для поддержания качества и стабильности кодовой базы, пожалуйста, следуйте этим шагам:

  1. Сделайте форк репозитория или создайте новую ветку от main.
  2. Вносите одно целенаправленное изменение на один pull request. Не смешивайте несвязанные функции или исправления.
  3. Держите изменения UI и бизнес-логики небольшими, чистыми и читаемыми.
  4. Запустите приложение и тщательно проверьте затронутый пользовательский сценарий.
  5. Обновите документацию и README, если поведение приложения изменилось.
  6. Откройте pull request с чётким описанием ваших изменений.

Предпочтительное содержание Pull Request должно включать:

  • Описание того, что именно изменилось
  • Обоснование, почему это было изменено
  • Чёткие инструкции для рецензентов, как протестировать ваши изменения
  • Скриншоты или выводы логов, если это уместно для внесённых изменений

Лицензия

MIT. См. LICENSE.

Благодарности

Особая благодарность SoliSpirit/mtproto за предоставление MTProto-прокси, используемых этим приложением, а также за их поддержку и обновление. Это помогает поддерживать стабильность проекта и обеспечивает актуальность доступных соединений.