Como posso listar TODOS os registros DNS?


188

Existe alguma maneira de listar TODOS os registros DNS de um domínio?

Eu sei de coisas como dig e nslookup, mas elas só vão tão longe. Por exemplo, se eu tiver um registro de subdomínio A como

test A somedomain.co.uk

então, a menos que eu peça especificamente, por exemplo.

dig any test.somedomain.co.uk

Eu não consigo ver.

Existe alguma maneira (além de olhar os registros indo ao gerenciador de DNS) para ver exatamente o que são todos os registros DNS?

Respostas:


202

Quando você consulta QUALQUER, você obterá uma lista de todos os registros nesse nível, mas não abaixo.

# try this
dig google.com any

Isso pode retornar registros A, TXT, NS, MX, etc, se o nome do domínio for exatamente "google.com". No entanto, ele não retornará registros filhos (por exemplo, www.google.com). Mais precisamente, você pode obter esses registros, se existirem. O servidor de nomes não precisa retornar esses registros se optar por não fazer isso (por exemplo, para reduzir o tamanho da resposta).

Um AXFR é uma transferência de zona e provavelmente é o que você deseja. No entanto, eles geralmente são restritos e não estão disponíveis, a menos que você controle a zona. Geralmente, você realiza uma transferência de zona diretamente do servidor autoritário (o @ ns1.google.com abaixo) e geralmente de um servidor de nomes que pode não ser publicado (um servidor de nomes furtivos).

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

Se você tiver o controle da zona, poderá configurá-lo para obter transferências protegidas com uma chave TSIG. Este é um segredo compartilhado que o cliente pode enviar ao servidor para autorizar a transferência.


4
Obrigado por isso (também para deltab). Explicação muito clara, confirmando o que eu suspeitava - está disponível, mas não para mim (a menos que eu comece a configurar meus próprios servidores de nomes). Como eu cuido de muitos domínios, teria sido tão bom executar um script para obter TODAS as entradas DNS.
— Ken

13
Os servidores de nomes Route53 da Amazon não incluíam TXT, MX e SOA quando tentei isso. Depois de consultar especificamente esses registros, eles foram incluídos em QUALQUER resposta. Então leve isso com um grão de sal.
— Peter

Acabei de "conexão recusada"
— niico

1
A especificação nunca foi interpretada de forma consistente pelos resolvedores quanto ao significado de QUALQUER. Definitivamente, isso não significa ALL (existe um pedido para isso), embora alguns (não muitos) o tenham tratado dessa maneira. Outros apenas despejaram seu cache e outros o restringiram a certos tipos de registro. Nos tempos modernos (2016 ou mais), a maioria dos provedores desativou QUALQUER (ou lhe deu uma resposta inútil) ou tem planos de fazê-lo, pois é o driver comum para muitos ataques de amplificação.
— precisa

1
O @NickBastin neste rascunho ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ) atualmente no trabalho tenta reforçar o padrão de respostas para esse tipo de consulta. Ele também discute por que é / não deve ser usado.
— Patrick Mevzek 7/0318

29

Eu melhorei a resposta de Josh . Eu notei issodig apenas mostra entradas já presentes no cache do servidor de nomes consultado, por isso é melhor extrair um servidor de nome autoritativo da SOA (em vez de confiar no servidor de nome padrão). Também desabilitei a filtragem de IPs curinga, porque geralmente estou mais interessado na correção da configuração.

O novo script usa um -xargumento para saída expandida e um -s NSargumento para escolher um servidor de nomes específico: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

adicione linhas dig -t txt +nocmd $NS "$DOM" +noall +answer(e modifique $DOM) para inspecionar os registros TXT de um domínio.
— Max

19

Na ausência da capacidade de fazer transferências de zona, escrevi este pequeno script do 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

Agora eu uso dg example.compara obter uma lista agradável e limpa de registros DNS ou dg example.com xpara incluir vários outros subdomínios populares.

grep -vE "${wild_ips}"filtra registros que podem ser o resultado de uma entrada DNS curinga, como * 10800 IN A 1.38.216.82. Caso contrário, uma entrada curinga faria parecer que havia registros para cada$COMMON_SUBDOMAN .

Nota: Isso depende de ANYconsultas bloqueadas por alguns provedores de DNS, como o CloudFlare .


3
Sei que esta solução está longe de ser ideal, mas me poupou muito tempo, por isso espero que seja útil para outra pessoa.
— Zaz

adicione dig -t txt +nocmd "$1" +noall +answer(e modifique para "*.$1"etc.) para inspecionar os registros TXT de um domínio.
— Max

15

host -afunciona bem, semelhante a dig any.

POR EXEMPLO:

$ 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
Isso não responde à pergunta, que é como encontrar outros registros na zona DNS de um domínio, ou seja, todos os registros de subdomínios. Isso não quer dizer que host -anão seja um comando útil, apenas não faz o que o OP está procurando.
— Spikyjt

13
  1. Uma transferência de zona é a única maneira de garantir que você tenha todos os registros de subdomínio. Se o DNS estiver configurado corretamente, você normalmente não poderá executar uma transferência de zona externa.

  2. O projeto scans.io possui um banco de dados de registros DNS que podem ser baixados e pesquisados ​​por subdomínios. Isso requer o download dos 87 GB de dados DNS, como alternativa, você pode tentar a pesquisa on-line em https://hackertarget.com/find-dns-host-records/


12

Para Windows:

Pode ser necessário verificar o status dos registros DNS dos seus domínios ou verificar os Servidores de Nomes para ver quais registros os servidores estão puxando.

  1. Inicie o prompt de comando do Windows navegando para Iniciar> Prompt de Comando ou via Executar> CMD.

  2. Digite NSLOOKUP e pressione Enter. O servidor padrão está definido para o seu DNS local, o endereço será o seu IP local.

  3. Defina o tipo de registro DNS que você deseja pesquisar digitando set type=##onde ## é o tipo de registro e pressione Enter. Você pode usar QUALQUER, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA ou SRV como o tipo de registro.

  4. Agora digite o nome do domínio que você deseja consultar e pressione Enter. Neste exemplo, usaremos Managed.com.

  5. O NSLOOKUP agora retornará as entradas de registro para o domínio que você inseriu.

  6. Você também pode alterar os servidores de nome que você está consultando. Isso é útil se você estiver verificando os registros antes que o DNS seja totalmente propagado. Para alterar o servidor de nomes, digite o servidor [servidor de nomes]. Substitua [name server] pelos Name Servers que você deseja usar. Neste exemplo, definiremos como NSA.managed.com.

  7. Depois de alterado, altere o tipo de consulta (Etapa 3), se necessário, e insira um novo domínio (Etapa 4.)

Para Linux:

1) Verifique os registros DNS usando o comando Dig Dig significa a informação de domínio groper é uma ferramenta flexível para interrogar os servidores de nomes DNS. Ele realiza pesquisas de DNS e exibe as respostas retornadas dos servidores de nome consultados. A maioria dos administradores de DNS usa dig para solucionar problemas de DNS devido à sua flexibilidade, facilidade de uso e clareza de saída. Outras ferramentas de pesquisa tendem a ter menos funcionalidade do que cavar.

2) Verifique os registros DNS usando o comando NSlookup O Nslookup é um programa para consultar servidores de nomes de domínio da Internet. O Nslookup possui dois modos interativos e não interativos.

O modo interativo permite que o usuário consulte os servidores de nomes para obter informações sobre vários hosts e domínios ou imprima uma lista de hosts em um domínio.

O modo não interativo é usado para imprimir apenas o nome e as informações solicitadas para um host ou domínio. É uma ferramenta de administração de rede que os ajudará a verificar e solucionar problemas relacionados ao DNS.

3) Verifique os registros DNS usando o host Host Command é um utilitário simples para realizar pesquisas de DNS. É normalmente usado para converter nomes em endereços IP e vice-versa. Quando nenhum argumento ou opção é fornecido, o host imprime um breve resumo dos argumentos e opções da linha de comando.


Isso funcionou perfeitamente para mim no Windows 7, mas parece estar com erros no Windows 10, é isso que eu costumava depurar um registro TXT no Windows 10: nslookup -querytype = txt yourdomainnamehere.com
— The Coder

11

O que você deseja é chamado de transferência de zona . Você pode solicitar uma transferência de zona usando dig -t axfr.

Uma zona é um domínio e todos os domínios abaixo dele que não são delegados para outro servidor.

Observe que as transferências de zona nem sempre são suportadas. Eles não são usados ​​na pesquisa normal, apenas na replicação de dados DNS entre servidores; mas existem outros protocolos que podem ser usados ​​para isso (como rsync sobre ssh), pode haver um risco à segurança da exposição de nomes, e as respostas de transferência de zona custam mais para gerar e enviar do que as pesquisas DNS comuns.


1

Não há uma maneira fácil de obter todos os registros DNS de um domínio em uma instância. Você pode ver apenas alguns registros, por exemplo, se quiser ver um registro A para um determinado domínio, use o comando: dig a (type of record) domain.com. É o mesmo para todos os outros tipos de registros que você deseja ver para esse domínio.

Se você não estiver familiarizado com a interface da linha de comandos, também poderá usar um site como mxtoolbox.com. O que é uma ferramenta muito útil para obter registros de um domínio.

Espero que isso responda à sua pergunta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.