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

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

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

test A somedomain.co.uk

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

dig any test.somedomain.co.uk

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

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



답변

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 키로 보호되는 전송을 받도록 영역을 설정할 수 있습니다. 이것은 클라이언트가 전송을 승인하기 위해 서버에 보낼 수있는 공유 비밀입니다.


답변

조쉬 의 대답을 개선했습니다 . 나는 것으로 나타났습니다 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


답변

영역 전송 기능이 없으면이 작은 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차단 한 쿼리에 의존 합니다 .


답변

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.


답변

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

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


답변

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 주소로 변환하거나 그 반대로 변환하는 데 사용됩니다. 인수 또는 옵션이 제공되지 않으면 호스트는 명령 행 인수 및 옵션에 대한 간단한 요약을 인쇄합니다.


답변

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

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

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