모든 DNS 레코드를 어떻게 나열합니까?


188

도메인의 모든 DNS 레코드를 나열 할 수있는 방법이 있습니까?

나는 dig와 nslookup과 같은 것들에 대해 알고 있지만 그들은 지금까지만 갔다. 예를 들어 하위 도메인 A 레코드를

test A somedomain.co.uk

구체적으로 요청하지 않는 한, 예를 들어.

dig any test.somedomain.co.uk

나는 그것을 볼 수 없습니다.

모든 DNS 레코드가 무엇인지 정확히 볼 수있는 방법이 있습니까 (DNS 관리자로 이동하여 레코드를 보는 것 이외)?

답변:


202

ANY를 쿼리하면 해당 수준의 모든 레코드 목록이 표시되지만 아래에는 표시되지 않습니다.

# try this
dig google.com any

도메인 이름이 정확히 "google.com"인 경우 A 레코드, TXT 레코드, NS 레코드, MX 레코드 등을 반환 할 수 있습니다. 그러나 자녀 기록 (예 : www.google.com)은 반환하지 않습니다. 보다 정확하게는 이러한 레코드가 존재하는 경우 얻을 수 있습니다. 이름 서버는 응답하지 않기로 선택한 경우 (예 : 응답의 크기를 줄이기 위해) 이러한 레코드를 반환하지 않아도됩니다.

AXFR은 영역 전송이며 원하는 것일 수 있습니다. 그러나 이러한 영역은 일반적으로 제한되며 영역을 제어하지 않으면 사용할 수 없습니다. 일반적으로 권한이있는 서버 (아래 @ ns1.google.com)와 게시되지 않을 수있는 이름 서버 (스텔스 이름 서버)에서 영역 전송을 수행합니다.

# This will return "Transfer failed"
dig @ns1.google.com google.com axfr

영역을 제어 할 수있는 경우 TSIG 키로 보호되는 전송을 받도록 영역을 설정할 수 있습니다. 이것은 클라이언트가 전송을 승인하기 위해 서버에 보낼 수있는 공유 비밀입니다.


4
감사합니다 (델탭도). 내가 의심했던 것을 확인하는 매우 명확한 설명-사용 가능하지만 나 자신이 아닙니다 (내 자신의 네임 서버 설정을 시작하지 않는 한). 매우 많은 도메인을 살펴보면 모든 DNS 항목을 가져 오기 위해 스크립트를 실행하는 것이 좋을 것입니다.
Ken

13
Amazon의 Route53 네임 서버에는 TXT, MX 및 SOA가 포함되지 않았습니다. 내가 구체적 으로이 레코드를 쿼리 한 후 모든 답변에 포함 된 곳. 소금 한 조각으로 이것을 가져 가십시오.
피터

방금 "연결이 거부되었습니다"
niico

1
스펙은 ANY의 의미에 대해 리졸버에 의해 일관되게 해석되지 않았습니다. 일부 (많은 사람들이) 그런 식으로 처리하지는 않았지만 반드시 모든 것을 의미하지는 않습니다 (요청이 있음). 다른 사람들은 캐시를 버리고 다른 레코드는 특정 레코드 유형으로 제한했습니다. 현대 (2016+)에서 대부분의 공급자는 모든 증폭 공격의 일반적인 동인이므로 ANY를 비활성화하거나 쓸모없는 답변을 제공 할 계획입니다.
Nick Bastin

1
@NickBastin 현재 작업중인 이 초안 ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ) 은이 쿼리 유형에 대한 회신 패턴을 강화하려고합니다. 또한 왜 사용하지 않아야하는지에 대해서도 논의합니다.
Patrick Mevzek

29

조쉬 의 대답을 개선했습니다 . 나는 것으로 나타났습니다 dig조회 된 네임 서버의 캐시에 이미 존재하는 유일한 쇼 항목, 그것은 더 나은 있도록 SOA에서 권위있는 네임 서버를 당겨 (대신 기본 네임 서버에 의존) 할 수 있습니다. 또한 일반적으로 설정의 정확성에 더 관심이 있기 때문에 와일드 카드 IP 필터링을 비활성화했습니다.

새로운 스크립트는 -x확장 된 출력에 대한 -s NS인수 와 특정 이름 서버를 선택하기 위한 인수를 사용합니다.dig -x example.com

#!/bin/bash
set -e; set -u
COMMON_SUBDOMAINS="www mail mx a.mx smtp pop imap blog en ftp ssh login"
EXTENDED=""

while :; do case "$1" in
  --) shift; break ;;
  -x) EXTENDED=y; shift ;;
  -s) NS="$2"; shift 2 ;;
  *) break ;;
esac; done
DOM="$1"; shift
TYPE="${1:-any}"

test "${NS:-}" || NS=$(dig +short  SOA "$DOM" | awk '{print $1}')
test "$NS" && NS="@$NS"

if test "$EXTENDED"; then
  dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
  wild_ips=$(dig +short "$NS" "*.$DOM" "$TYPE" | tr '\n' '|')
  wild_ips="${wild_ips%|}"
  for sub in $COMMON_SUBDOMAINS; do
    dig +nocmd $NS "$sub.$DOM" +noall +answer "$TYPE"
  done | cat  #grep -vE "${wild_ips}"
  dig +nocmd $NS "*.$DOM" +noall +answer "$TYPE"
else
  dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
fi

도메인의 TXT 레코드를 검사하려면 행을 추가하고을 dig -t txt +nocmd $NS "$DOM" +noall +answer수정하십시오 $DOM.
최대

19

영역 전송 기능이 없으면이 작은 bash 스크립트를 작성했습니다 dg.

#!/bin/bash
COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login)
if [[ "$2" == "x" ]]; then
    dig +nocmd "$1" +noall +answer "${3:-any}"
    wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')"
    wild_ips="${wild_ips%|}"
    for sub in "${COMMON_SUBDOMAINS[@]}"; do
        dig +nocmd "$sub.$1" +noall +answer "${3:-any}"
    done | grep -vE "${wild_ips}"
    dig +nocmd "*.$1" +noall +answer "${3:-any}"
else
    dig +nocmd "$1" +noall +answer "${2:-any}"
fi

이제 dg example.comDNS 레코드를 깔끔하고 깔끔하게 정리하거나 dg example.com x인기있는 여러 하위 도메인을 포함시키는 데 사용합니다.

grep -vE "${wild_ips}"와 같은 와일드 카드 DNS 항목의 결과 일 수있는 레코드를 필터링합니다 * 10800 IN A 1.38.216.82. 그렇지 않으면 와일드 카드 항목이 각각에 대한 레코드가있는 것처럼 표시됩니다 $COMMON_SUBDOMAN.

참고 : 이는 CloudFlare와 같은 일부 DNS 공급자ANY차단 한 쿼리에 의존 합니다 .


3
나는이 솔루션이 이상적이지 않다는 것을 알고 있지만 많은 시간을 절약 했으므로 다른 사람에게 도움이되기를 바랍니다.
Zaz

도메인의 TXT 레코드를 검사하려면 추가 dig -t txt +nocmd "$1" +noall +answer및 수정 "*.$1"등을 수행하십시오.
최대

15

host -a와 비슷하게 작동합니다 dig any.

EG :

$ host -a google.com
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10403
;; flags: qr rd ra; QUERY: 1, ANSWER: 18, AUTHORITY: 0, ADDITIONAL: 0


;; QUESTION SECTION:
;google.com.            IN  ANY

;; ANSWER SECTION:
google.com.     1165    IN  TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"
google.com.     53965   IN  SOA ns1.google.com. dns-admin.google.com. 2014112500 7200 1800 1209600 300
google.com.     231 IN  A   173.194.115.73
google.com.     231 IN  A   173.194.115.78
google.com.     231 IN  A   173.194.115.64
google.com.     231 IN  A   173.194.115.65
google.com.     231 IN  A   173.194.115.66
google.com.     231 IN  A   173.194.115.67
google.com.     231 IN  A   173.194.115.68
google.com.     231 IN  A   173.194.115.69
google.com.     231 IN  A   173.194.115.70
google.com.     231 IN  A   173.194.115.71
google.com.     231 IN  A   173.194.115.72
google.com.     128 IN  AAAA    2607:f8b0:4000:809::1001
google.com.     40766   IN  NS  ns3.google.com.
google.com.     40766   IN  NS  ns4.google.com.
google.com.     40766   IN  NS  ns1.google.com.
google.com.     40766   IN  NS  ns2.google.com.

11
이것은 도메인의 DNS 영역에서 다른 레코드를 찾는 방법, 즉 하위 도메인에 대한 모든 레코드를 찾는 방법에 대한 질문에 답하지 않습니다. 그것은 host -a유용한 명령이 아니라 OP가 찾고있는 것을하지 않습니다.
spikyjt

13
  1. 영역 전송은 모든 하위 도메인 레코드가 있는지 확인하는 유일한 방법입니다. DNS가 올바르게 구성된 경우 일반적으로 외부 영역 전송을 수행 할 수 없어야합니다.

  2. scans.io의 프로젝트는 다운로드 및 하위 도메인을 검색 할 수 있습니다 DNS 레코드의 데이터베이스를 가지고있다. 이를 위해서는 87GB의 DNS 데이터를 다운로드해야합니다. 또는 https://hackertarget.com/find-dns-host-records/ 에서 온라인으로 데이터를 검색 할 수도 있습니다.


12

Windows의 경우 :

도메인 DNS 레코드의 상태를 확인하거나 이름 서버를 확인하여 서버가 가져 오는 레코드를 확인해야 할 수도 있습니다.

  1. 시작> 명령 프롬프트로 이동하거나 실행> CMD를 통해 Windows 명령 프롬프트를 시작하십시오.

  2. NSLOOKUP을 입력하고 Enter를 누르십시오. 기본 서버는 로컬 DNS로 설정되며 주소는 로컬 IP가됩니다.

  3. set type=##여기서 ##은 레코드 유형 을 입력하여 조회 할 DNS 레코드 유형을 설정 한 다음 Enter를 누르십시오. ANY, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA 또는 SRV를 레코드 유형으로 사용할 수 있습니다.

  4. 쿼리하려는 도메인 이름을 입력 한 후 Enter를 누르십시오.이 예에서는 Managed.com을 사용합니다.

  5. NSLOOKUP은 이제 입력 한 도메인의 레코드 항목을 반환합니다.

  6. 쿼리중인 네임 서버를 변경할 수도 있습니다. DNS가 완전히 전파되기 전에 레코드를 확인하는 경우에 유용합니다. 이름 서버 유형 서버 [이름 서버]를 변경합니다. [이름 서버]를 사용하려는 이름 서버로 바꾸십시오. 이 예에서는 NSA.managed.com으로 설정합니다.

  7. 변경 한 후에는 필요한 경우 쿼리 유형을 변경하고 (3 단계) 새 도메인을 새로 입력하십시오 (4 단계).

Linux의 경우 :

1) Dig 명령을 사용하여 DNS 레코드 확인 Dig는 도메인 정보 groper를 나타내며 DNS 이름 서버를 조사하기위한 유연한 도구입니다. DNS 조회를 수행하고 쿼리 한 네임 서버에서 반환 된 응답을 표시합니다. 대부분의 DNS 관리자는 유연성, 사용 편의성 및 출력 명확성으로 인해 DNS 문제를 해결하기 위해 dig를 사용합니다. 다른 조회 도구는 파기보다 기능이 적은 경향이 있습니다.

2) NSlookup 명령을 사용하여 DNS 레코드 확인 Nslookup은 인터넷 도메인 이름 서버를 쿼리하는 프로그램입니다. Nslookup에는 대화식과 비 대화식의 두 가지 모드가 있습니다.

대화식 모드를 통해 사용자는 다양한 호스트 및 도메인에 대한 정보를 위해 네임 서버를 쿼리하거나 도메인의 호스트 목록을 인쇄 할 수 있습니다.

비 대화식 모드는 호스트 또는 도메인에 대한 이름과 요청 된 정보 만 인쇄하는 데 사용됩니다. DNS 관련 문제를 확인하고 해결하는 데 도움이되는 네트워크 관리 도구입니다.

3) 호스트 명령을 사용하여 DNS 레코드 확인 호스트는 DNS 조회를 수행하기위한 간단한 유틸리티입니다. 일반적으로 이름을 IP 주소로 변환하거나 그 반대로 변환하는 데 사용됩니다. 인수 또는 옵션이 제공되지 않으면 호스트는 명령 행 인수 및 옵션에 대한 간단한 요약을 인쇄합니다.


이것은 Windows 7에서 완벽하게 작동했지만 Windows 10에서는 버그가있는 것 같습니다. 이는 Windows 10에서 TXT 레코드를 디버깅하는 데 사용한 것입니다. nslookup -querytype = txt yourdomainnamehere.com
코더

11

원하는 것을 영역 전송 이라고합니다 . 을 사용하여 영역 전송을 요청할 수 있습니다 dig -t axfr.

영역은 도메인과 다른 서버로 위임되지 않은 아래의 모든 도메인입니다.

영역 전송이 항상 지원되는 것은 아닙니다. 이들은 일반 조회에는 사용되지 않으며 서버간에 DNS 데이터를 복제 할 때만 사용됩니다. 그러나이를 위해 사용할 수있는 다른 프로토콜 (예 : ssh를 통한 rsync)이 있습니다. 이름 노출로 인한 보안 위험이있을 수 있으며 영역 전송 응답은 일반적인 DNS 조회보다 생성 및 전송 비용이 더 많이 듭니다.


1

한 인스턴스에서 도메인에 대한 모든 DNS 레코드를 얻는 쉬운 방법은 없습니다. 예를 들어 특정 도메인에 대한 A 레코드를 보려면 dig a (type of record) domain.com 명령을 사용할 수 있습니다. 이것은 해당 도메인에 대해보고 싶은 다른 모든 유형의 레코드에 대해 동일합니다.

명령 행 인터페이스에 익숙하지 않은 경우 mxtoolbox.com과 같은 사이트를 사용할 수도 있습니다. Wich는 도메인 레코드를 얻는 데 매우 유용한 도구입니다.

이것이 귀하의 질문에 답변되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.