Dig comando: A saída é garantida para ser classificada?

2

Digamos que estou tentando pesquisar os IPs mail.yahoo.com , gmail.com e mail.google.com

Se eu executar:

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

Eu recebo:

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

Posso garantir que, se eu vir um registro CNAME , o registro A correspondente a ele não aparecerá antes de um CNAME correspondente a outra máquina ou um registro A de outro nome de host?

Por exemplo, deixe-me concentrar em mail.yahoo.com (eu só quero que o IP ou IPs mail.yahoo.com resolva):

Esta é a saída:

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

O nome do host que estou procurando ( mail.yahoo.com ) é a primeira coluna da primeira entrada. Então, há um monte de CNAMES que eu realmente não me importo e, em seguida, um A com o IP real (que eu me importo).

Existe a possibilidade de obter os registros CNAMES ou A fora de ordem? Algo como:

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

Ou ainda pior (o registro real A no topo):

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.

Ou o pior dos piores (em uma execução de dig de resolução múltipla, como a mostrada na parte superior do post):

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
    
por BorrajaX 29.10.2014 / 20:54

1 resposta

2

dig não reordena os resultados, mostra-os na ordem em que o servidor de nomes os retorna. Os servidores de nomes normalmente embaralham os resultados (aleatoriamente ou round-robin) sempre que são consultados para um registro específico (para implementar uma forma simples de balanceamento de carga), embora possa haver opções de configuração do servidor que substituam isso. No caso do BIND, as opções relevantes são rrset-order e sortlist .

Tanto quanto eu posso dizer, se você executar várias consultas com uma única invocação dig , é como se você tivesse executado dig separadamente para cada nome, nessa ordem. Não consigo imaginar por que o código não passaria por eles na ordem em que estão na linha de comando.

Se o servidor tiver que seguir CNAME registros para obter a resposta final, a especificação de DNS diz que cada alias será adicionado à resposta na ordem em que são processados. Então você tem a garantia de que o nome original que você deu será o primeiro e os resultados finais serão os últimos.

    
por 30.10.2014 / 20:00

Tags