Сервис для автоматической проверки и агрегации публичных VLESS / VMess / Trojan / Shadowsocks конфигураций с формированием готовых подписок (FAST / ALL / WHITE / BLACK) для клиентов семейства Xray/V2Ray.[web:12]
- Сбор конфигураций из заранее заданного набора публичных источников (GitHub и произвольные URL).[web:12]
- Нормализация и дедупликация ключей, ограничение максимального объёма входных данных.[cite:9]
- Активная проверка доступности узлов (TCP/TLS/WebSocket) с измерением задержки.[cite:9]
- Классификация по географии: отдельные пулы для России (RU) и Европы (EURO), жёсткий отбор российских выходных узлов.[cite:9]
- Формирование уровней FAST (топ по задержке) и ALL (все прошедшие проверку).[cite:9]
- Разделение на WHITE (живые ключи) и BLACK (недоступные при проверке).[cite:9]
- Аннотация каждой ноды: пинг, страна на русском и флаг, что упрощает фильтрацию в клиентах.[cite:9]
- Генерация
subscriptions_list.txtс HTTP‑ссылками на все итоговые списки для использования как подписок.[cite:9]
-
Сбор входных данных
Источники URL заданы в константахURLS_RUиURLS_MYвmain.py.[cite:9]
GitHub‑ссылки автоматически приводятся кraw.githubusercontent.com, содержимое разбирается построчно, отфильтровываются строки с префиксамиvless://,vmess://,trojan://,ss://.[cite:9] -
Дедупликация и лимит
Для каждого уникального ключа сохраняется только одна запись; общее количество ограничиваетсяMAX_KEYS_TO_CHECKдля предотвращения деградации производительности.[cite:9] -
Кэширование результатов
В файлchecked/history.jsonсохраняется состояние ключей: признак живости, задержка, страна, хост и время проверки.[cite:9]
При повторных запусках свежие и живые записи (моложеCACHE_HOURS) повторно не проверяются и сразу попадают в результаты.[cite:9] -
Проверка доступности
Для ключей без актуального кэша выполняется:- извлечение
host:port; - быстрый вывод страны (
get_country_fast) по домену и маркерам в строке; - исключение российских выходов из EURO‑пула (
is_russian_exit); - попытка установления соединения (TCP/TLS/WebSocket) с измерением RTT в миллисекундах.[cite:9]
Успешные ключи маркируются как живые, неуспешные — как BLACK‑кандидаты.[cite:9]
- извлечение
-
Аннотация ключей
Для живых конфигураций формируется финальная строка вида:
…#[123ms Германия 🇩🇪 @vlesstrojan]
с latency, русским названием страны и соответствующим флагом.[cite:9] -
Формирование слоёв FAST / ALL
- Из живых ключей отбрасываются варианты с задержкой выше
MAX_PING_MS.[cite:9] - Оставшиеся сортируются по задержке.
- Формируются списки:
res_ru_fast/res_euro_fast— топFAST_LIMIT(FAST‑слой);res_ru_all/res_euro_all— все живые (ALL‑слой).[cite:9]
- Из живых ключей отбрасываются варианты с задержкой выше
-
WHITE / BLACK
- WHITE: все живые ключи после проверки и фильтрации по задержке:
checked/RU_Best/ru_white_all_WHITE.txt;checked/My_Euro/my_euro_all_WHITE.txt.
- BLACK: все ключи, которые не удалось успешно проверить:
checked/RU_Best/ru_white_all_BLACK.txt;checked/My_Euro/my_euro_all_BLACK.txt.[cite:9]
- WHITE: все живые ключи после проверки и фильтрации по задержке:
-
Генерация подписок
Все результирующие файлы раскладываются по:-
checked/RU_Best— слои для RU; -
checked/My_Euro— слои для EURO.[cite:9]
Затем формируетсяchecked/subscriptions_list.txtсо ссылками формата: -
RUSSIA FAST:
ru_white_part1..4.txt -
RUSSIA ALL:
ru_white_all_part*.txt -
EUROPE FAST:
my_euro_part1..3.txt -
EUROPE ALL:
my_euro_all_part*.txt -
WHITE / BLACK для RU и EURO:
*_WHITE.txt,*_BLACK.txt.[cite:9]
Эти URL можно использовать в клиентах (Xray/V2Ray/Clash и др.) как HTTP‑подписки.[cite:9]
-
git clone https://github.com/kort0881/vpn-checker-backend.git
cd vpn-checker-backend
python main.pyПосле выполнения скрипта:
- результаты лежат в
checked/RU_Bestиchecked/My_Euro; - файл
checked/subscriptions_list.txtсодержит готовые HTTP‑ссылки для импорта в клиент.[cite:9]
Репозиторий содержит workflow, который по расписанию:
- выполняет
python main.py; - коммитит изменения в каталоге
checked/обратно в репозиторий.[web:12]
Таким образом, списки подписок поддерживаются в актуальном состоянии без ручного запуска скрипта.[web:12]