В настоящее время я пытаюсь написать сценарий, который проверяет, доступна ли данная запись, прикрепленная к имени, через все серверы имен, которые отвечают за это имя.
Например, я бы хотел хотел бы проверить, есть ли запись 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
, но это кажется довольно неуклюжим и подверженным ошибкам ...
Если вам нравится Perl, вы можете избавьте себя от кучи довольно привередливой работы, написав свой тест как плагин к Zonemaster . В его структуре уже есть (правильный) код для поиска нужного набора серверов имен и отправки запроса всем из них.