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앞에 나타나지 않도록 할 수 있습니까 ?CNAMEA

예를 들어 다음 사항에 집중하겠습니다 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가 포함된 레코드(제가 신경 쓰는 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가 귀하가 실행하는 순서대로 쿼리를 실행하기 때문입니다. 명령줄에서 지정합니다.

명령줄 구문이 설정되는 방식 때문에 순서가 중요합니다. 따라서 내 대답은 다음과 같습니다. 지정된 순서대로 접근하지 않으면 비전역 수정자가 망가질 것입니다.

매뉴얼 페이지에서:

BIND 9의 dig 구현은 명령줄에서 여러 쿼리 지정을 지원합니다(-f 배치 파일 옵션 지원 외에도). 각 쿼리에는 고유한 플래그, 옵션 및 쿼리 옵션 집합이 제공될 수 있습니다.

이 경우 각 쿼리 인수는 위에서 설명한 명령줄 구문의 개별 쿼리를 나타냅니다. 각각은 표준 옵션 및 플래그, 조회할 이름, 선택적 쿼리 유형 및 클래스, 해당 쿼리에 적용되어야 하는 쿼리 옵션으로 구성됩니다.

관련 정보