Skip to content

LexterS999/fetchNodes

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.


Установка

  1. Клонируйте репозиторий:

    git clone https://github.com/yourusername/FetchNodes.git
    cd FetchNodes
  2. Создайте и активируйте виртуальное окружение (опционально):

    python -m venv venv
    # Для Linux/Mac:
    source venv/bin/activate
    # Для Windows:
    venv\Scripts\activate
  3. Установите необходимые зависимости:

    pip install -r requirements.txt

Использование

Для запуска скрипта выполните:

python script.py

При выполнении скрипта происходит:

  1. Сбор данных:
    Загружается и декодируется контент с заданных URL, содержащих base64-кодированные конфигурации.

  2. Фильтрация и обогащение:

    • Фильтруются профили по разрешённым протоколам и критериям полноты.
    • Загружается база данных IP2Location для получения географической информации и данных о провайдере.
    • К профилям добавляется информация в виде эмодзи-флага страны и провайдера.
  3. Проверка серверов:
    Асинхронно проверяется доступность серверов (TCP, HTTP, HTTPS, UDP).
    На основе результатов проверки профили классифицируются по трем категориям:

    • Категория 1: Полностью заполненные профили с положительными ответами по всем критичным проверкам.
    • Категория 2: Полностью заполненные профили с частично положительными результатами.
    • Категория 3: Неполные профили с наличием хотя бы одного положительного ответа.
  4. Запись результата:
    Итоговый список валидных профилей записывается в файл fetchNodes/All_Subs.txt.

  5. Логирование:
    В процессе работы выводится подробная статистика и информация о выполненных этапах.


Детальное описание функционала

1. Сбор и декодирование данных

  • decode_base64(encoded)
    Декодирует строку, закодированную в Base64, с учётом выравнивания и нескольких кодировок.

  • decode_links(links)
    Загружает содержимое по списку URL, декодирует полученные данные и возвращает список строк.

2. Фильтрация профилей

  • 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-адресами и диапазонами портов.

3. Обогащение данных с помощью IP2Location

  • 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)
    Удаляет дублирующиеся профили.

4. Проверка доступности серверов

  • Проверка отдельных протоколов:

    • 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
    Асинхронно обрабатывают профили, фильтруя и сортируя их по категориям, а также собирают статистику.

5. Основная функция main

Оркестрирует весь процесс:

  • Обеспечивает создание выходной директории.
  • Выполняет последовательность операций: загрузка, декодирование, фильтрация, обогащение, проверка серверов и запись итогового файла.
  • Выводит итоговую статистику в лог.

Логирование

Скрипт использует модуль logging для:

  • Информирования об успешной обработке URL.
  • Вывода количества профилей после каждого этапа фильтрации.
  • Отображения итоговой статистики (количество исходных, уникальных, распределённых по категориям и отброшенных профилей).

Лицензия

Этот проект распространяется под лицензией MIT.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Languages

  • Python 100.0%