FetchNodes – это универсальный скрипт для сбора, фильтрации и проверки конфигурационных профилей VPN/Proxy. Он предназначен для автоматизированного получения узлов из множества удалённых источников, декодирования полученных данных, обогащения информации с помощью IP2Location, проверки доступности серверов и формирования итогового списка проверенных профилей.
Скрипт выполняет следующие задачи:
- Сбор данных: Загружает base64-кодированные конфигурации с заранее заданного набора URL.
- Декодирование: Декодирует полученные данные с поддержкой различных кодировок.
- Фильтрация профилей: Отбирает конфигурации, соответствующие разрешённым протоколам (например,
vless
,trojan
,tuic
,hy2
), проверяет их на полноту и исключает профили с IPv6-адресами или диапазонами портов. - Геолокация и обогащение: Автоматически загружает базу данных IP2Location для получения кода страны (с последующим преобразованием в эмодзи-флаг) и информации о провайдере по IP-адресу.
- Проверка доступности серверов: Асинхронно проверяет доступность серверов по протоколам TCP, HTTP, HTTPS и UDP, классифицируя профили на три категории в зависимости от результатов проверки.
- Вывод результата: Сохраняет итоговый отсортированный список проверенных профилей в файл
fetchNodes/All_Subs.txt
и выводит подробную статистику выполнения.
-
Сбор и декодирование:
- Автоматическая загрузка конфигурационных файлов по URL.
- Поддержка декодирования Base64 с учётом нескольких кодировок.
-
Фильтрация:
- Отбор профилей по разрешённым протоколам.
- Проверка полноты конфигураций (наличие обязательных параметров).
- Исключение IPv6-адресов и профилей с диапазонами портов.
-
Обогащение данных:
- Загрузка и использование базы данных IP2Location.
- Асинхронное получение информации о стране (код и эмодзи-флаг) и провайдере для каждого IP.
-
Проверка серверов:
- Асинхронная проверка доступности серверов через TCP, HTTP, HTTPS и UDP.
- Классификация профилей по результатам проверки (категории 1, 2 и 3).
-
Логирование и статистика:
- Логирование ключевых событий и этапов обработки.
- Вывод итоговой статистики (количество исходных, уникальных профилей, распределение по категориям и т.д.).
- Python: версия 3.7 и выше.
- Зависимости:
Для работы скрипта необходимы следующие модули:pybase64
requests
binascii
socket
asyncio
aiohttp
logging
IP2Location
tempfile
zipfile
io
re
urllib
(модулиurlparse
,parse_qs
,quote
)concurrent.futures
Рекомендуется установить зависимости через файл requirements.txt
.
-
Клонируйте репозиторий:
git clone https://github.com/yourusername/FetchNodes.git cd FetchNodes
-
Создайте и активируйте виртуальное окружение (опционально):
python -m venv venv # Для Linux/Mac: source venv/bin/activate # Для Windows: venv\Scripts\activate
-
Установите необходимые зависимости:
pip install -r requirements.txt
Для запуска скрипта выполните:
python script.py
При выполнении скрипта происходит:
-
Сбор данных:
Загружается и декодируется контент с заданных URL, содержащих base64-кодированные конфигурации. -
Фильтрация и обогащение:
- Фильтруются профили по разрешённым протоколам и критериям полноты.
- Загружается база данных IP2Location для получения географической информации и данных о провайдере.
- К профилям добавляется информация в виде эмодзи-флага страны и провайдера.
-
Проверка серверов:
Асинхронно проверяется доступность серверов (TCP, HTTP, HTTPS, UDP).
На основе результатов проверки профили классифицируются по трем категориям:- Категория 1: Полностью заполненные профили с положительными ответами по всем критичным проверкам.
- Категория 2: Полностью заполненные профили с частично положительными результатами.
- Категория 3: Неполные профили с наличием хотя бы одного положительного ответа.
-
Запись результата:
Итоговый список валидных профилей записывается в файлfetchNodes/All_Subs.txt
. -
Логирование:
В процессе работы выводится подробная статистика и информация о выполненных этапах.
-
decode_base64(encoded)
Декодирует строку, закодированную в Base64, с учётом выравнивания и нескольких кодировок. -
decode_links(links)
Загружает содержимое по списку URL, декодирует полученные данные и возвращает список строк.
-
filter_for_protocols(data, protocols)
Отбирает строки, содержащие указанные протоколы. -
filter_allowed_protocols(profiles)
Фильтрует профили, оставляя только те, которые начинаются с разрешённых префиксов (например,vless://
). -
is_complete_profile(profile)
иis_strictly_complete_profile(profile)
Проверяют наличие обязательных параметров в URL-конфигурации. -
filter_ipv6_profiles(profiles)
иfilter_port_range_profiles(profiles)
Исключают профили с IPv6-адресами и диапазонами портов.
-
download_ip2location_db()
Загружает архив базы данных IP2Location и извлекает из него BIN-файл. -
Асинхронные функции:
async_get_country_flag(ip, db_path)
иbulk_get_country_flags(ip_list, db_path)
– получение кода страны.async_get_provider(ip, db_path)
иbulk_get_providers(ip_list, db_path)
– получение данных о провайдере.country_code_to_flag(country_code)
– преобразование кода страны в эмодзи-флаг.
-
rename_profiles(configs, host_flag_map, host_provider_map)
Добавляет информацию о стране и провайдере к конфигурациям в виде фрагмента URL. -
remove_duplicate_profiles(profiles)
Удаляет дублирующиеся профили.
-
Проверка отдельных протоколов:
check_tcp
,check_http
,check_https
– асинхронно проверяют доступность сервера по соответствующим протоколам.check_udp
– выполняется в отдельном потоке для проверки UDP-соединения.
-
combined_check(ip, port, timeout)
Параллельно запускает проверки для всех протоколов. -
classify_profile
Определяет категорию профиля на основе результатов проверок:- Категория 1: Все критичные проверки (TCP, HTTP, HTTPS) дали положительный результат.
- Категория 2: Профиль строго заполнен, но не все проверки положительны.
- Категория 3: Неполный профиль с хотя бы одним положительным ответом.
-
check_profile
иfilter_and_sort_profiles
Асинхронно обрабатывают профили, фильтруя и сортируя их по категориям, а также собирают статистику.
Оркестрирует весь процесс:
- Обеспечивает создание выходной директории.
- Выполняет последовательность операций: загрузка, декодирование, фильтрация, обогащение, проверка серверов и запись итогового файла.
- Выводит итоговую статистику в лог.
Скрипт использует модуль logging
для:
- Информирования об успешной обработке URL.
- Вывода количества профилей после каждого этапа фильтрации.
- Отображения итоговой статистики (количество исходных, уникальных, распределённых по категориям и отброшенных профилей).
Этот проект распространяется под лицензией MIT.