получить запись NS для домена с помощью dig

В настоящее время я пытаюсь написать сценарий, который проверяет, доступна ли данная запись, прикрепленная к имени, через все серверы имен, которые отвечают за это имя.

Например, я бы хотел хотел бы проверить, есть ли запись A для foo.example.com , доступная для всех записей NS для домена example.com ( a.iana-servers.net и b.iana-servers.net )

Сценарий работает, сначала запрашивая записи NS для данного имя (или его родители, если это не удается; например, поскольку foo.example.com. не имеет записи NS , мы пробуем example.com. затем и, наконец, .com. ), а затем проверьте запись A со всеми серверами имен.

 name=foo.example.com
 # get the nameservers for ${name}
 sname=${name}
 until [ -z "x${sname}" ]; do
    dns=$(dig +short NS "${sname}")
    if [ "x${dns}" != "x" ]; then
      break
    fi
    sname=${sname#*.}
done
# now that we have a list of nameservers in $dns, we query them
for ns in $dns; do
    dig +short A "${name}" @$"{ns}"
done

Этот вид работает, , если имя на самом деле CNAME . В этом случае dig NS вернет запись CNAME (а не запись NS или no запись)

$ dig +noall +answer NS foo.example.com
foo.example.com. 300 IN CNAME bar.example.com.
$ dig +short NS foo.example.com
bar.example.com.
$ dig A foo.example.com @bar.example.com
;; global options: +cmd
;; connection timed out; no servers could be reached
$

Вместо этого Я хотел бы иметь что-то вроде:

$ dig +short NS foo.example.com
$ dig +short NS example.com
a.iana-servers.net.
b.iana-servers.net.
$ dig +short A foo.example.com @a.iana-servers.net.
93.184.216.34
$

Итак, мой вопрос: как я могу заставить dig только вернуть только записи NS , а не какие-то другие запись, которая указывает на хост, который не является сервером имен?

Одно из очевидных решений - проанализировать вывод dig + noall + answer , чтобы увидеть, действительно ли он содержит запись NS , но это кажется довольно неуклюжим и подверженным ошибкам ...

0
задан 21 December 2016 в 12:05
1 ответ

Если вам нравится Perl, вы можете избавьте себя от кучи довольно привередливой работы, написав свой тест как плагин к Zonemaster . В его структуре уже есть (правильный) код для поиска нужного набора серверов имен и отправки запроса всем из них.

2
ответ дан 4 December 2019 в 13:36

Теги

Похожие вопросы