Как программно найти первичный сервер имен для домена, включая поддомен? - PullRequest
0 голосов
/ 28 июня 2019

Я хочу проверить в своем приложении, имеет ли данный домен правильные записи DNS, не дожидаясь распространения новой конфигурации. Я хочу выполнить поиск домена на основном сервере имен, чтобы получить самые свежие результаты, но я обнаружил, что простой поиск SOA может завершиться неудачей для поддоменов.

> resolveSoa('subdomain.example.com')
Error: ENOTFOUND

Также режим сбоя для поддоменов с определенным CNAME отличается (что, вероятно, зависит от программного обеспечения сервера DNS):

> resolveSoa('cnamed-subdomain.example.com')
Error: EBADRESP

Как правильно найти первичный сервер имен для любого (действительного) домена?

1 Ответ

0 голосов
/ 28 июня 2019

Пока что решение, которое я нашел:

findPrimaryNameServer(domain):
  do {
    if cname := lookupCName(domain)
       domain := cname

    soa := lookupSoa(domain)
    domain := domain.slice(domain.find(".") + 1)
  } while (!soa)

  return soa.primaryNameServer

Похоже, что это обрабатывает как записи CNAME, так и субдомены.

...