MTProto Hub — это Android-приложение, которое загружает ссылки на MTProto-прокси, проверяет их работоспособность, сохраняет результаты в локальную базу данных и предоставляет локальную ссылку tg://proxy для Telegram. Приложение также может запускать фоновую службу, которая ретранслирует и перекодирует трафик через выбранный работающий прокси.
Этот репозиторий представляет собой практическую кодовую базу на Android/Kotlin, а не клиент Telegram. Его задача — управлять источниками прокси, ранжировать работающие прокси, действовать как активный крипто-шлюз MTProto и предоставлять Telegram локальную конечную точку для подключения.
Начиная с версии 1.1.1, вам больше не нужно собирать проект из исходников для использования приложения. Предварительно скомпилированные стабильные APK-файлы доступны для прямого скачивания.
- Перейдите в раздел Releases этого репозитория GitHub.
- Скачайте последний
.apk-файл из приложенных файлов релиза. - Установите APK на своё Android-устройство (возможно, потребуется разрешить установку из неизвестных источников в настройках устройства).
Обновление приложения: Чтобы обновить приложение до новой версии, просто скачайте последний релизный APK и установите его поверх текущей установки. Все ваши настройки, списки прокси, пользовательские секреты и записи локальной базы данных будут автоматически сохранены. Вы также можете использовать встроенную проверку обновлений, если она включена в настройках.
- загружает списки прокси с настраиваемого удалённого URL
- разбирает ссылки вида
tg://proxyиhttps://t.me/proxy - проверяет прокси с помощью TCP-подключений
- хранит данные прокси и логи в Room
- ранжирует прокси по баллам, задержке и проценту успешных проверок
- поддерживает статические пользовательские или генерируемые на устройстве MTProto-секреты
- запускает локальную фоновую службу на
127.0.0.1и действует как крипто-шлюз, преобразуя локальный трафик для вышестоящих серверов - экспортирует как исходную ссылку на прокси, так и локальную ссылку для Telegram
- показывает логи, подключённых клиентов, настройки и простую справку
- Приложение загружает источник прокси из
Настроек. ProxyManagerзагружает и разбирает список.ProxyCheckerпроверяет каждый прокси и обновляет его статус.- Лучший работающий прокси отображается в интерфейсе.
LocalProxyServiceслушает на локальном порту. Он принимает входящий трафик Telegram, используя статический локальный секрет, расшифровывает его, повторно шифрует с помощью секрета удалённого прокси и отправляет дальше.- Telegram подключается к локальной ссылке
tg://proxyвместо прямого использования удалённого прокси, обеспечивая стабильное соединение даже при смене фонового прокси.
app/src/main/java/com/example/MainActivity.kt— точка входа и оболочка Composeapp/src/main/java/com/example/ui/— экраны, навигация и ViewModelapp/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 источника прокси, возвращающий обычные текстовые строки с валидными ссылками на прокси
- Откройте проект в Android Studio.
- Синхронизируйте Gradle.
- Запустите вариант
debugилиreleaseна устройстве или эмуляторе. - Откройте приложение и нажмите Загрузить сейчас или Проверить пинги.
- Запустите шлюз с главного экрана.
- Скопируйте локальную ссылку
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 для каждой.
Вклад приветствуется и ценится. Для поддержания качества и стабильности кодовой базы, пожалуйста, следуйте этим шагам:
- Сделайте форк репозитория или создайте новую ветку от
main. - Вносите одно целенаправленное изменение на один pull request. Не смешивайте несвязанные функции или исправления.
- Держите изменения UI и бизнес-логики небольшими, чистыми и читаемыми.
- Запустите приложение и тщательно проверьте затронутый пользовательский сценарий.
- Обновите документацию и README, если поведение приложения изменилось.
- Откройте pull request с чётким описанием ваших изменений.
Предпочтительное содержание Pull Request должно включать:
- Описание того, что именно изменилось
- Обоснование, почему это было изменено
- Чёткие инструкции для рецензентов, как протестировать ваши изменения
- Скриншоты или выводы логов, если это уместно для внесённых изменений
MIT. См. LICENSE.
Особая благодарность SoliSpirit/mtproto за предоставление MTProto-прокси, используемых этим приложением, а также за их поддержку и обновление. Это помогает поддерживать стабильность проекта и обеспечивает актуальность доступных соединений.
