Skip to content
/ domains Public

Этот проект содержит несколько списков хостов для различных целей.

Notifications You must be signed in to change notification settings

mazixs/domains

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Domain Availability Checker

Проверка доступности доменов с адаптивной валидацией: DNS (A/SOA) → HTTP → TCP → Ping.

Архитектура

┌─────────────────────────────────────────────────────────────┐
│                      Входные данные                         │
│              list.txt (дубликаты удаляются)                 │
└─────────────────────────────┬───────────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                   asyncio.Semaphore(30)                     │
│               Ограничение параллельных задач                │
└─────────────────────────────┬───────────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│  Проверка доступности (Logic)                               │
│                                                             │
│   ┌────────────┐    ┌──────────┐  ┌─────────┐  ┌────────┐   │
│   │    DNS     │───▶│   HTTP   │─▶│   TCP   │─▶│  Ping  │   │
│   │  A-record  │ YES│  HTTPS   │  │  :443   │  │  ICMP  │   │
│   │     │      │    │   :80    │  │   :80   │  │        │   │
│   │     ▼      │    └─────┬────┘  └────┬────┘  └───┬────┘   │
│   │ SOA-record?│          │            │           │        │
│   │ (Service)  │          │            │           │        │
│   └─────┬──────┘          │            │           │        │
│         ▼                 ▼            ▼           ▼        │
│       NO DNS            SUCCESS?     SUCCESS?    SUCCESS?   │
│         │                 │            │           │        │
│         ▼                 ▼            ▼           ▼        │
│       ALIVE?            ALIVE        ALIVE       ALIVE      │
└─────────────────────────────────────────────────────────────┘
                              ▼
           ИТОГ: ALIVE = DNS OR HTTP OR TCP OR PING
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                  asyncio.as_completed()                     │
│        Результаты по мере готовности (без барьеров)         │
└─────────────────────────────────────────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│           Интерактивное удаление мертвых доменов            │
│               (Y/N по каждому домену)                       │
└─────────────────────────────────────────────────────────────┘

Логика проверки

Домен считается ЖИВЫМ, если прошла успешно хотя бы одна проверка.

Шаг Проверка Детали Результат
1 DNS Запрос A-записи (IPv4). Если нет — запрос SOA (для сервисных доменов без IP, например oaiusercontent.com). Если есть A или SOA ➔ Жив
2 HTTP Запрос HEAD/GET с поддержкой SNI и User-Agent. (Таймаут 10с) Если код ответа получен ➔ Жив
3 TCP Попытка соединения с портами 443 и 80. (Таймаут 5с) Если порт открыт ➔ Жив
4 Ping ICMP эхо-запрос. Работает даже если DNS не вернул IP (системный резолв). (Таймаут 5с) Если есть ответ ➔ Жив

Особенности:

  • SOA Fallback — защита от удаления корневых сервисных доменов (CDN, Service Roots).
  • DNS Retry — 2 попытки с паузой (защита от сбоев резолвера).
  • SNI поддержка — корректная работа с CDN (Cloudflare, Instagram).
  • Smart Timeout — увеличенные таймауты (10с DNS/HTTP) для медленных сетей.
  • Дедупликация — автоматическое удаление дубликатов при загрузке.

Файлы и их назначение

Файл Роль Детали
test.py Проверка доступности Работает только с list.txt. Проверяет живой домен или нет (DNS, Ping, HTTP). Удаляет мертвые.
filter_domains.py Фильтрация уровней Читает list.txt и создает list_2nd_level.txt. Преобразует поддомены в домены 2-го уровня (например, api.google.com -> google.com). Убирает дубликаты. Не проверяет доступность.
list.txt Исходный список Полный список всех доменов и поддоменов.
list_2nd_level.txt Результат фильтрации Содержит только домены 2-го уровня. Идеально для DNS-маршрутизации Keenetic (прошивка 5.0+).

Требования

  • Python: 3.10+ (рекомендуется 3.11+)
  • ОС: Windows / Linux / macOS

Установка

# Виртуальное окружение
python -m venv .venv

# Активация
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate

# Зависимости
pip install -r requirements.txt

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

1. Проверка на валидность (test.py)

Скрипт берет домены из list.txt, проверяет их доступность и предлагает удалить нерабочие.

python test.py

2. Создание списка для роутера (filter_domains.py)

Скрипт берет list.txt, преобразует все поддомены в домены 2-го уровня (обрезает лишнее) и сохраняет результат в list_2nd_level.txt, удаляя дубликаты.

python filter_domains.py

Важно: Этот скрипт не проверяет, работают ли сайты. Он просто чистит структуру доменов для использования в правилах маршрутизации (например, Keenetic).

Зависимости

Пакет Назначение
aiodns Асинхронные DNS-запросы через публичные серверы (1.1.1.1, 8.8.8.8, 9.9.9.9)
aiohttp Асинхронные HTTP-запросы с поддержкой SNI
tldextract Разбор доменных имен (используется в filter_domains.py)

About

Этот проект содержит несколько списков хостов для различных целей.

Resources

Stars

Watchers

Forks

Languages