Форк vernette/warpscout, который показывает WARP-эндпоинты, через которые реально работает Telegram.
Документация: 🇷🇺 Русский · 🇬🇧 English
Оригинал сканирует эндпоинты Cloudflare WARP и показывает, где каждый из них выходит - регион, пограничный узел, задержку, потери, - и ранжирует их по потерям и пингу. О том, доступен ли с этого выхода Telegram, такое ранжирование не говорит ничего, поэтому -best и -conf могут выдать быстрый и удачно расположенный эндпоинт, через который Telegram не подключается.
Форк добавляет эту проверку и отдаёт ей решающее слово:
-tg- колонкаTG. Как только туннель поднят и проверен, через него же всем пяти дата-центрам MTProto одновременно отправляется настоящий MTProto-запрос (req_pq). Просто установленного TCP-соединения мало: DPI завершает handshake в сторону Telegram и молча съедает данные, поэтому ДЦ засчитывается только когда реально ответил. Ответить должны все пять: аккаунт живёт на одном ДЦ и клиент не может выбрать другой, так что выход, с которого отвечают только три из пяти, для части аккаунтов мёртв (живой пример: через WARP во Франкфурте DC1/3/5 отвечали, DC2/4 - нет, и Telegram Desktop висел в «connecting...»). В колонке - время ответа самого медленного ДЦ,3/5, если ответили не все, илиblocked, если не ответил ни один; в сводке - какие ДЦ не ответили ни с одного эндпоинта. Имя не резолвится, SNI не отправляется - ровно как это делает клиент Telegram, так что колонка про выход, а не про то, переживает ли DPI конкретное имя хоста. Заблокированный эндпоинт стоит одного-timeout, а не пяти.- Доступность Telegram важнее любых метрик задержки. Эндпоинт, с которого Telegram доступен, встаёт выше недоступного независимо от пинга, поэтому
-bestи-confвыбирают рабочий вариант. -tg-only- выбросить остальные совсем (включает-tg). Раз остались только эндпоинты с рабочим Telegram, ранжируются они по отклику Telegram, а не по пингу до эндпоинта --bestи-confберут тот, где Telegram быстрее. Если Telegram недоступен ниоткуда, скан прямо об этом сообщает и завершается с ненулевым кодом, вместо того чтобы оставить отчёт из бесполезных эндпоинтов.
Больше не изменено ничего: те же протоколы, флаги, вывод и файлы аккаунта. Ниже - краткая выжимка, полная документация лежит в оригинале, в vernette/warpscout, и применима здесь как есть.
curl -fsSL https://raw.githubusercontent.com/niklzz/warpscout-tg/master/install.sh | sh
# на роутерах OpenWrt curl по умолчанию нет
wget -qO- https://raw.githubusercontent.com/niklzz/warpscout-tg/master/install.sh | shПовторный запуск - он же обновление. Бинарники под Linux, macOS, Windows и Android (amd64/arm64) - на странице релизов; из исходников - go install github.com/niklzz/warpscout-tg@latest.
| Команда | Что делает |
|---|---|
register |
Создать аккаунт WARP и сохранить его. Начинать нужно с этого. |
scan |
Просканировать эндпоинты и показать рабочие. |
find-junk |
Подобрать параметры AmneziaWG, которые проходят через фильтр. |
find-sni |
Подобрать SNI для MASQUE, который проходит через фильтр. |
socks |
Поднять один эндпоинт локальным SOCKS5-прокси, чтобы проверить. |
version |
Вывести установленную версию отдельной строкой. |
warpscout <команда> -h показывает все флаги любой из них.
# 1. один раз - создаст warpscout-account.json в текущей папке
warpscout register
# 2. скан с проверкой Telegram
warpscout scan -p awg -tg
# только эндпоинты, через которые Telegram работает, лучший как ip:port
warpscout scan -p awg -tg-only -best
# ... и сразу в готовый конфиг AmneziaWG
warpscout scan -p awg -tg-only -conf warp.conf
# добавить RTT и потери внутри туннеля, выкинуть московский узел, оставить немецкие выходы
warpscout scan -p awg -tg -P -exclude-node DME -country DE
# проверить один эндпоинт руками через локальный SOCKS5-прокси
warpscout socks -e "$(warpscout scan -p awg -tg-only -best)" -p awgВ фильтрующей сети начинать стоит с -p awg; если он ничего не нашёл, следующее - -gen-i1 quic, а после него find-junk. Docker, WARP-in-WARP (-through), MASQUE, обфускация и решение проблем работают так, как описано в оригинале.
MIT, как и в оригинале. Благодарности, скриншоты и ссылки на донат - в оригинальном репозитории, туда и стоит идти.