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

386
BorrajaX

Допустим, я пытаюсь найти IP-адреса mail.yahoo.com, gmail.comиmail.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 

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

0

1 ответ на вопрос

0
Micah

No - the order of the returned result is up to the DNS server, and you don't have control over that, so I would not depend on the order from a particular DNS server.

I do believe and my tests so far have confirmed this, that the actual queries are done in order, in your case, first google.com, and last mail.google.com - that is because dig will run the queries in the order you specify on the command line.

Because of how the command line syntax is setup, the order is important. Thus my answer. If it didn't approach them in the order specified any non-global modifiers would get screwed up.

From the man page:

The BIND 9 implementation of dig supports specifying multiple queries on the command line (in addition to supporting the -f batch file option). Each of those queries can be supplied with its own set of flags, options and query options.

In this case, each query argument represent an individual query in the command-line syntax described above. Each consists of any of the standard options and flags, the name to be looked up, an optional query type and class and any query options that should be applied to that query.