Команда Dig: гарантированно ли отсортированы выходные данные?

Команда Dig: гарантированно ли отсортированы выходные данные?

Допустим, я пытаюсь найти IP- адреса mail.yahoo.comиgmail.commail.google.com

Если я выполню:

dig @8.8.8.8 +nocomments +noquestion \
    +noauthority +noadditional +nostats +nocmd \
    gmail.com mail.yahoo.com mail.google.com

Я получил:

gmail.com.                       299    IN  A       173.194.123.21
gmail.com.                       299    IN  A       173.194.123.22
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169
mail.google.com.                   0    IN  CNAME   googlemail.l.google.com.
googlemail.l.google.com.         243    IN  A       173.194.123.21
googlemail.l.google.com.         243    IN  A       173.194.123.22

Могу ли я гарантировать, что если я увижу CNAMEзапись, Aсоответствующая ей запись не появится перед CNAMEсоответствующей ей записью для другой машины или Aзаписью для другого имени хоста?

Например, позвольте мне сосредоточиться на mail.yahoo.com(я просто хочу, чтобы IP-адрес или IP-адреса mail.yahoo.comразрешались):

Вот что получилось:

mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169

Имя хоста, которое я ищу ( mail.yahoo.com), находится в первом столбце первой записи. Затем идет куча того, что CNAMESмне действительно не важно, а затем Aзапись с реальным IP (который мне важен).

Есть ли вероятность, что записи будут CNAMESнарушены A? Что-то вроде:

ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net. #(!)BAD
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net. #(!)BAD
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169

Или даже хуже (сама Aзапись сверху):

any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.

Или худшее из худшего (в digисполнении с несколькими разрешениями, как показано в верхней части поста):

ats.member.g02.yahoodns.net.       0    IN  CNAME   any-ats.member.a02.yahoodns.net.
any-ats.member.a02.yahoodns.net.  17    IN  A       98.139.21.169
mail.google.com.                   0    IN  CNAME   googlemail.l.google.com.  # This one I want
gmail.com.                       299    IN  A       173.194.123.21            # This one I want
gmail.com.                       299    IN  A       173.194.123.22            # This one I want
mail.yahoo.com.                    0    IN  CNAME   login.yahoo.com.          # This one I want
login.yahoo.com.                   0    IN  CNAME   ats.login.lgg1.b.yahoo.com.
ats.login.lgg1.b.yahoo.com.        0    IN  CNAME   ats.member.g02.yahoodns.net.
googlemail.l.google.com.         243    IN  A       173.194.123.21
googlemail.l.google.com.         243    IN  A       173.194.123.22

Заранее спасибо.

решение1

Нет, порядок возвращаемого результата зависит от DNS-сервера, и вы не можете его контролировать, поэтому я бы не стал полагаться на порядок, определяемый конкретным DNS-сервером.

Я верю, и мои тесты это подтвердили, что фактические запросы выполняются в определенном порядке: в вашем случае сначала google.com, а затем mail.google.com — это происходит потому, что dig будет выполнять запросы в том порядке, который вы укажете в командной строке.

Из-за того, как настроен синтаксис командной строки, порядок важен. Отсюда мой ответ. Если бы он не подходил к ним в указанном порядке, любые неглобальные модификаторы были бы испорчены.

Из страницы руководства:

Реализация dig в BIND 9 поддерживает указание нескольких запросов в командной строке (в дополнение к поддержке параметра пакетного файла -f). Каждый из этих запросов может быть снабжен собственным набором флагов, параметров и параметров запроса.

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

Связанный контент