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?

Ken
fonte

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.

Denis Phillips
fonte
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
dan3
fonte
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 .

Zaz
fonte
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.
Datavar
fonte
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/

squizzy99
fonte
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.

Kervin L
fonte
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.

deltab
fonte
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.

Mike Fraanje
fonte