Чекер Telegram-прокси на Go: MTProto, FakeTLS и SOCKS5. Без зависимостей, один бинарник, всё асинхронно.
- MTProto (
plain,dd/secure,ee/FakeTLS) и SOCKS5; - два режима проверки: быстрый
resPQи полный клиентский handshake (--full); - ссылки
tg://proxy,https://t.me/proxy,t.me/socks,socks5://, а такжеhost:port; - источники: аргументы, файлы, stdin, HTTP(S)-подписки (
--url) — ссылки вытаскиваются даже из HTML и постов канала; - дедупликация одинаковых прокси, повторы (
--attempts), строгий режим (--min-successes); - оценка качества: буква A–D и очки по задержке, джиттеру и потерям;
- фазы отдельно: TCP-коннект, FakeTLS/SOCKS5-рукопожатие, ответ Telegram;
- серия зашифрованных пингов в режиме
--full: медиана, джиттер, потери; - реальная страна выхода и проверка подмены дата-центров (
--inspect); - замер скорости скачивания через прокси (
--speedtest); - проверка стабильности сессии во времени (
--hold); - качество маскировки FakeTLS (
--masking) и приём чужого секрета (--check-open); - предел параллельных подключений (
--max-conns); - фильтры:
--mode,--port,--country,--asn,--exclude; - сортировка по задержке,
--top N,--alive-only; - сводка по странам, сетям (ASN) и причинам отказа;
- вывод: текст с цветом, JSON, CSV, список ссылок;
- сохранение в файлы:
--out,--save-live,--save-dead,--save-links; - машиночитаемые коды ошибок (
error_kind) в JSON и CSV; --info: режим секрета, домен FakeTLS, IP, страна, ASN и провайдер через ipwho.is.
Готовые бинарники для Linux, macOS и Windows — во вкладке Releases.
Через Go:
go install github.com/yzewe/mtproto-checker/cmd/mtproto-checker@latestИли из исходников:
go build -o mtproto-checker ./cmd/mtproto-checkerОдна ссылка:
mtproto-checker "tg://proxy?server=192.0.2.10&port=443&secret=ee..."Список из файла, только живые, по возрастанию задержки:
mtproto-checker --file proxies.txt --sort --alive-onlyПодписка из канала, полный handshake, сохранение результатов:
mtproto-checker --url "https://t.me/s/channel_name" --full --sort --save-links live.txt --out results.jsonТолько немецкие и нидерландские FakeTLS-прокси на 443 порту:
mtproto-checker --file proxies.txt --mode fake_tls --port 443 --country de,nl --alive-onlyСтрогая проверка (два успешных прохода из трёх) с деталями:
mtproto-checker --file proxies.txt --attempts 3 --min-successes 2 --infoКонвейер: взять живые прокси и передать дальше:
mtproto-checker --file proxies.txt --format links --alive-only --quiet --save-links live.txt
cat proxies.txt | mtproto-checker --stdin --format json > results.jsonВсё ниже работает без аккаунта: после --full у чекера есть auth key, а часть
API Telegram отвечает и без авторизации — те методы, что клиент вызывает на
экране входа.
--inspect и --speedtest требуют --api-id: Telegram отвергает запросы с
чужим или пустым api_id. Свой берётся на my.telegram.org,
api_hash не нужен.
mtproto-checker --api-id 123456 --inspect --speedtest --masking --check-open proxies.txt| Флаг | Что показывает |
|---|---|
--inspect |
страну, из которой Telegram видит трафик, и список дата-центров: чужие адреса в нём означают, что прокси заворачивает трафик через себя |
--speedtest |
скорость скачивания — тянет языковой пакет, самый большой ответ, доступный без аккаунта |
--hold 30s |
держит сессию заданное время с пингами, ловит прокси, которые отваливаются после первых секунд, и показывает дрейф задержки |
--masking |
что FakeTLS-прокси отвечает обычному TLS-клиенту: хорошо настроенный отдаёт сертификат заявленного домена, плохой молчит и потому заметен для DPI |
--check-open |
повторяет рукопожатие с неверным секретом; если прокси пускает, он не проверяет секрет вообще |
--max-conns N |
сколько одновременных подключений прокси реально обслуживает |
Заявленная страна и страна выхода расходятся — значит трафик идёт не туда, куда написано; гео по IP этого не покажет, там будет страна самого прокси.
Скорость отдачи (upload) без аккаунта измерить нельзя: upload.saveFilePart
требует авторизованного пользователя.
| Режим | Что делает | Когда использовать |
|---|---|---|
| по умолчанию | обфусцированное рукопожатие + req_pq_multi, проверка resPQ и nonce |
массовая проверка списков |
--full |
всё то же плюс полный обмен как в клиенте: факторизация pq, RSA_PAD, Diffie-Hellman, создание auth key и зашифрованный ping → pong |
когда нужно убедиться, что прокси реально пропускает трафик Telegram |
--full делает четыре round-trip вместо одного, поэтому он заметно медленнее, зато прокси, который отвечает только на первый пакет, его не пройдёт.
LIVE— Telegram ответил через прокси.DEAD— не ответил (в скобках причина).INVALID— ссылку не удалось разобрать.
[LIVE] A 192.0.2.10:4443 49.1 ms via faketls dc2/padded +authkey
phases: connect 44.4 · handshake 46.1 · resPQ 56.1 ms
ping: 3/3, median 49.1 ms, jitter 17.8 ms
secret: fake_tls, sni=www.google.com
geo: 192.0.2.10 🇳🇱 NL, Amsterdam AS64500 Example Hosting
exit: NL, Telegram put us on dc2
config: 19 datacenters, all official
speed: 1830 KB/s (681 KB in 0.37s)
mask: good (*.google.com, issued by WR2)
secret: rejects a wrong secret
[DEAD] 198.51.100.7:443 (dial tcp 198.51.100.7:443: i/o timeout)
[INVALID] tg://proxy?server=203.0.113.5 (missing port)
summary: 3 live, 1 dead, 1 invalid of 5 in 10.04s
by country: 🇳🇱 NL 2/2 · 🇩🇪 DE 1/1 · 🇫🇷 FR 0/1
by ASN: AS64500 Example Hosting 2/2 · AS64501 Other Hosting 1/1
failures: dial_timeout 1
best: 192.0.2.10:4443 🇳🇱 NL 49.1 ms grade A
tg://proxy?server=192.0.2.10&port=4443&secret=ee...
Оценка: A — быстро и стабильно, D — пользоваться больно. Считается по медианной
задержке, джиттеру, потерям пингов и доле неудачных попыток. Строки с фазами и
пингом показываются с --info.
Задержка в строке LIVE — это медиана пингов (или ответ на req_pq_multi), а не
общее время проверки: полный handshake тратит несколько round-trip на обмен
ключами, и это говорит о протоколе, а не о прокси. Общее время есть в JSON как
timings.total_ms.
В JSON и CSV каждая неудача помечена стабильным кодом: dial_timeout,
dial_refused, dns_failed, unreachable, secret_rejected,
handshake_failed, timeout, connection_closed, no_respq,
socks_auth_failed, socks_rejected, canceled. По ним удобно считать
статистику, не разбирая текст ошибок.
tg://proxy?server=192.0.2.10&port=443&secret=ee...
https://t.me/proxy?server=192.0.2.11&port=443&secret=dd...
https://t.me/socks?server=192.0.2.12&port=1080&user=name&pass=secret
socks5://name:secret@192.0.2.12:1080
192.0.2.13:8080
# строки с # и // игнорируются
Строки без ссылок пропускаются, поэтому можно скармливать сохранённую HTML-страницу или выгрузку канала целиком.
--file файл со ссылками (можно несколько раз)
--url HTTP(S)-подписка со ссылками (можно несколько раз)
--stdin читать ссылки из stdin
--timeout таймаут одного соединения (по умолчанию 8s)
--concurrency сколько прокси проверять параллельно (32)
--attempts попыток на прокси (2)
--min-successes сколько успешных попыток нужно для LIVE (1)
--full полный клиентский handshake с auth key
--pings сколько зашифрованных пингов слать в режиме --full (3)
--api-id api_id с my.telegram.org, нужен для --inspect и --speedtest
--inspect страна выхода и проверка подмены дата-центров
--speedtest скорость скачивания через прокси
--hold держать сессию заданное время и мерить дрейф задержки
--masking что FakeTLS-прокси показывает обычному TLS-клиенту
--check-open принимает ли прокси неверный секрет
--max-conns сколько параллельных подключений открыть
--retry-delay пауза перед второй попыткой, дальше экспоненциально (250ms)
--info секрет, домен FakeTLS и гео через ipwho.is
--mode оставить только fake_tls, secure, plain, socks5 или tcp
--port оставить только эти порты
--country оставить только эти страны (включает --info)
--asn оставить только эти автономные системы (включает --info)
--exclude файл со ссылками или хостами, которые пропустить
--format text | json | csv | links
--out сохранить показанные результаты (.json, .csv или .txt)
--save-live сохранить живые в JSON
--save-dead сохранить мёртвые в JSON
--save-links сохранить живые как tg:// ссылки
--sort сортировать живые по задержке
--top показать только первые N
--alive-only показывать только живые
--quiet без текстового вывода (файлы и код возврата остаются)
--no-color без цвета
--version версия
Код возврата: 0 — есть живые прокси, 1 — живых нет, 2 — ошибка запуска.
cmd/mtproto-checker точка входа и разбор флагов
internal/input сбор ссылок из аргументов, файлов, stdin и подписок
internal/proxy разбор ссылок и секретов (dd, ee, hex, base64)
internal/mtproto транспорт и протокол: обфускация, FakeTLS, SOCKS5,
RSA_PAD, AES-IGE, Diffie-Hellman, auth key, ping,
вызовы API и проверки прокси
internal/checker параллельный прогон, повторы, оценка качества
internal/filter отбор по режиму, порту, стране, ASN, исключениям
internal/geo ipwho.is с кэшем на запуск
internal/report text, JSON, CSV, links, сводки, запись в файлы
Обфускация и порядок сообщений повторяют поведение официальных клиентов (см. tgnet в исходниках Telegram для Android).
make build # бинарник с версией из git
make vet # go vet
make fmt # gofmtMIT