Об этом проекте
Domain Check — это авторитетный инструмент проверки доступности доменов, который напрямую опрашивает RDAP-серверы реестров. RDAP является назначенным ICANN преемником WHOIS. В README приводится сравнение: RDAP использует HTTPS со структурированным JSON, в то время как WHOIS использует текстовый TCP-порт 43, не поддерживает .dev и .app, а также возвращает специфичный для каждого реестра текст, который сложно парсить. В ходе тестов whois ошибочно сообщил о доступности зарегистрированного домена, тогда как RDAP был точен во всех случаях; проект также ссылается на исследовательский документ по сравнению точности.
Интерфейсы. Проект предлагает три способа взаимодействия. Веб-интерфейс предоставляет форму без необходимости регистрации. REST API (доступен по адресу /api/v1/) поддерживает проверку одного домена, проверку нескольких TLD (через параметр tlds через запятую), bulk-эндпоинт POST для проверки до 50 доменов (лимит тела запроса 64 КБ) и эндпоинт проверки состояния (health). Ответы API возвращаются в формате JSON и содержат домен, статус доступности, TLD, метку времени проверки, источник данных, статус кэша и длительность; для зарегистрированных доменов также указываются регистратор, даты создания и истечения, имена серверов (nameservers) и коды статуса. CLI предоставляет подкоманды check и bulk, проверку multi-TLD, вывод в JSON или CSV, индикатор прогресса для массовых запусков, настраиваемую многопоточность и документированные коды выхода: 0, если все домены доступны; 1, если хотя бы один занят; 2 при ошибке.
Domain Watch. Опциональная функция, включаемая флагом enable-watch, опрашивает отслеживаемые домены и отправляет вебхук при переходе домена из статуса «зарегистрирован» в «доступен». Регистрация отслеживания возвращает id, URL вебхука и секрет HMAC; уведомления включают заголовок X-DomainCheck-Signature с подписью, начинающейся с sha256, которую получатель проверяет с помощью секрета. Отслеживание является одноразовым, истекает через 90 дней, ограничено 10 записями на IP в сутки с интервалом опроса по умолчанию 15 минут. Функция включает защиту от SSRF, блокировку частных IP и предотвращение DNS-rebinding. Сохраняются только домен и URL вебхука.
Лимиты запросов (rate limits) применяются на уровне IP: 10 запросов в минуту для веб-интерфейса, 60 для API одиночных проверок и 5 для массовых; при превышении возвращается ошибка 429 и заголовок Retry-After.
Self-hosting и конфигурация. Domain Check поставляется в виде одного бинарного файла Go без зависимостей среды выполнения или Docker-образа; для сборки из исходников требуется Go 1.26 или новее. Шаблоны и статические ресурсы встроены в бинарный файл. Настройки задаются через флаги, переменные окружения DOMCHECK_ или YAML-файл конфигурации (приоритет: флаги > env > файл > значения по умолчанию). Документированные параметры включают адрес прослушивания, размер LRU-кэша и отдельные TTL кэша для доступных и зарегистрированных результатов, интервал обновления IANA RDAP bootstrap, обработку X-Forwarded-For через trust-proxy, CORS-источники, эндпоинт метрик Prometheus, формат и уровень логов, а также путь к базе данных watch, интервал опроса, максимальный TTL и лимит отслеживания на IP. Приведены примеры обратного прокси для Caddy и nginx.
Архитектура. Код организован в виде точки входа command и внутренних пакетов: движок проверки (RDAP-клиент, fallback на WHOIS, DNS-префильтр, загрузчик IANA bootstrap, LRU-кэш, защита от SSRF, лимиты запросов для каждого реестра), многослойная конфигурация, валидация доменов с преобразованием IDN в punycode и извлечением TLD через publicsuffix, HTTP-сервер с обработчиками и CLI. Поток запроса описывается так: валидация, поиск в кэше, DNS-префильтр для быстрого определения зарегистрированных имен, лимиты реестра, RDAP-запрос, парсинг, сохранение в кэш и JSON-ответ. TTL кэша по умолчанию: 5 минут для доступных результатов, 1 час для зарегистрированных и 30 секунд для ошибок.
Безопасность и обслуживание. В README указаны защита от SSRF, заголовки безопасности (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy), использование не-root пользователя в Docker и полное отсутствие трекинга (без аналитики, куки или хранения данных). Разработка ведется с использованием go test, фаззинг-тестирования и golangci-lint; в репозитории отмечены агрессивные настройки автоматической очистки мусора git. Проект распространяется под лицензией MIT и представляет собой зеркало на GitHub self-hosted экземпляра git.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.