Documente Academic
Documente Profesional
Documente Cultură
Introdução
O DIG (Domain Information Groper) é um utilitário que serve para realizarmos pesquisas
de DNS. Ele funciona enviando consultas aos servidores e mostrando as respostas
devolvidas por eles. Só a título de curiosidade, muitas ferramentas do IP-OK usam de
diversas maneiras este aplicativo.
Tipos de registros
Antes de avançarmos para a sintaxe do comando é bom revisarmos os tipos mais
comuns de registros.
Primeiros passos
A sintaxe básica do comando é:
Onde:
$ dig a ipok.com.br
;; QUESTION SECTION:
;ipok.com.br. IN A
;; ANSWER SECTION:
ipok.com.br. 807 IN A 177.66.168.145
;; AUTHORITY SECTION:
ipok.com.br. 86307 IN NS ns2.ipok.com.br.
ipok.com.br. 86307 IN NS ns1.ipok.com.br.
;; ADDITIONAL SECTION:
ns1.ipok.com.br. 86307 IN A 177.66.168.145
ns2.ipok.com.br. 86307 IN A 177.66.168.147
Opções do comando
O DIG oferece uma série de opções especiais que afetam como as consultas (ou
queries) serão feitas e/ou como o resultado será exibido. Isso é feito utilizando-se um
argumento precedido do sinal “+“. Exemplo:
Em alguns casos, quando a opção é ativa por padrão e se quer desativá-la (por exemplo,
recursividade), usamos o argumento “+no” e a respectiva opção. Exemplo:
Exemplos de opções:
• +tcp: Utiliza o protocolo TCP para realizar as queries. Isso significa que a
conexão terá como destino a porta TCP 53 (O padrão é usar o protocolo UDP).
• +rec: Utiliza recursividade. É ativa por padrão. Podemos desativá-la usando o
“+no“.
• +short: Faz com que a saída tenha menos informações adicionais.
• +time=N: Estabelece o timeout da consulta para N segundos.
$ dig ipok.com.br a
;; QUESTION SECTION:
;ipok.com.br. IN A
;; ANSWER SECTION:
ipok.com.br. 900 IN A 177.66.168.145
;; AUTHORITY SECTION:
ipok.com.br. 36062 IN NS ns1.ipok.com.br.
ipok.com.br. 36062 IN NS ns2.ipok.com.br.
;; ADDITIONAL SECTION:
ns1.ipok.com.br. 70552 IN A 177.66.168.145
ns2.ipok.com.br. 70552 IN A 177.66.168.147
$ dig ipok.com.br mx
;; ANSWER SECTION:
ipok.com.br. 900 IN MX 10 mx-
08.mailserverpro.com.br.
Pesquisa dos servidores DNS (NS)
$ dig ipok.com.br ns
;; ANSWER SECTION:
ipok.com.br. 900 IN NS ns1.ipok.com.br.
ipok.com.br. 900 IN NS ns2.ipok.com.br.
;; ANSWER SECTION:
ipok.com.br. 874 IN SOA ns1.ipok.com.br.
postmaster.ipok.com.br. (
2016062806 ; serial
10800 ; refresh (3 hours)
15 ; retry (15 seconds)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
$ dig -x 177.66.168.145
;; ANSWER SECTION:
145.168.66.177.in-addr.arpa. 3600 IN PTR ns1.ipok.com.br.
;; QUESTION SECTION:
;ipok.com.br. IN A
;; ANSWER SECTION:
ipok.com.br. 900 IN A 177.66.168.145
;; AUTHORITY SECTION:
ipok.com.br. 900 IN NS ns2.ipok.com.br.
ipok.com.br. 900 IN NS ns1.ipok.com.br.
;; ADDITIONAL SECTION:
ns1.ipok.com.br. 900 IN A 177.66.168.145
ns2.ipok.com.br. 900 IN A 177.66.168.147
SEÇÕES
A resposta padrão de uma consulta DNS é organizada em 5 seções: Header, Question,
Answer, Authority e Additional. Algumas delas sempre estão presentes (como a Header
e Question) e as outras podem não ser exibidas caso o servidor que respondeu a consulta
não as tenha preenchido.
Você mesmo pode optar por não mostrar uma ou outra seção específica (por exemplo,
construindo um script, alguma monitoração, teste automático, etc). Para isso, você deve
usar aquele padrão “+[no]argumento” que vimos no artigo anterior.
Por exemplo, se você usar o argumento “+noheader“, a saída do comando omitirá o bloco
referente à seção “Header“, assim como o “+noanswer” omitirá a seção “Answer“. Isso
é possível de ser feito com todas as seções: +noheader, +noquestion, +noanswer,
+noauthority, +noadditional, +noall.
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: NOERROR, id: 60822
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;ipok.com.br. IN A
;; ANSWER SECTION:
ipok.com.br. 900 IN A 177.66.168.145
;; AUTHORITY SECTION:
ipok.com.br. 900 IN NS ns2.ipok.com.br.
ipok.com.br. 900 IN NS ns1.ipok.com.br.
A seção “Header” sempre será exibida nas respostas. Ela contém diversas informações a
respeito da consulta, assim como campos de status e de controle. Os principais são:
• status: indica sucesso da consulta (status: NOERROR) ou então o tipo de erro que
ocorreu com a query.
• flags: indicador das opções de recursividade e indicador de autoridade (flags: qr aa rd).
• contadores: na mesma linha das flags, indicam quantos resultados por seção vieram na
resposta.
o QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
QUESTION
Esta seção replica a query que foi enviada para consulta. Neste momento, torna-se
somente informativo, baseado no que foi solicitado.
;; QUESTION SECTION:
;ipok.com.br. IN A
ANSWER
Esta seção contém a resposta para a consulta que foi enviada. Esta, assim como as
próximas, tem um conteúdo dinâmico, ou seja, podem conter inúmeros resultados
dependendo do que foi solicitado.
;; ANSWER SECTION:
ipok.com.br. 900 IN A 177.66.168.145
No exemplo que estamos trabalhando, temos somente um único resultado (que é o registro
“A” do domínio ipok.com.br). Compare o resultado da pesquisa “dig hotmail.com a“.
AUTHORITY
;; AUTHORITY SECTION:
ipok.com.br. 86172 IN NS ns1.ipok.com.br.
ipok.com.br. 86172 IN NS ns2.ipok.com.br.
ADDITIONAL
;; ADDITIONAL SECTION:
ns1.ipok.com.br. 900 IN A 177.66.168.145
ns2.ipok.com.br. 900 IN A 177.66.168.147
Este conjunto de letras (aa, rd, ra, etc), são indicadores do estado (ligado/desligado) de
um conjunto independente de bits que compõe a seção “Header“. Ela tem a seguinte
estrutura:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Portanto, o que vemos consolidado como “Flags” na saída do comando são os estados
dos bits acima destacados (com exceção de Opcode e RCODE). Seus significados são:
• QR: especifica se a mensagem é uma query (0) ou uma resposta (1). Como estamos
avaliando somente as respostas, este bit sempre estará ligado (consequentemente,
sempre veremos a string “qr” no campo “flags“).
• AA: Authoritative Answer. Especifica que o servidor que respondeu à solicitação é
autoritativo para este domínio.
• TC: Truncation. Especifica que a mensagem de resposta está truncada.
• RD: Recursion Desired. Especifica que a query é recursiva, ou seja, que as requisições
devem ser encaminhadas a outros servidores até que o servidor autoritativo seja
encontrado. Por padrão, o DIG sempre envia consultas com este bit ligado.
• RA: Especifica que o servidor que respondeu à requisição suporta consultas recursivas.
• Z: Reservado para uso futuro.
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: NOERROR, id: 36408
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; WARNING: recursion requested but not available
Aqui, o servidor respondeu que é o autoritativo para o domínio pesquisado (“aa“). Veja
também que nossa query enviou o bit de recursividade ligado (“rd“, que é ligado por
padrão no DIG). Porém, apesar de solicitarmos recursividade, o servidor não respondeu
de volta com a opção “ra“, ou seja, esse servidor não aceita consultas recursivas. Isso se
prova também com a mensagem de aviso retornada: “recursion requested but not
available“.
Veja a diferença quando realizamos a consulta para um servidor que aceita recursividade:
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: NOERROR, id: 58672
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
Agora, como este servidor não é o autoritativo para o domínio (8.8.8.8 – google-public-
dns-a.google.com, é o dns público do Google), então não temos o bit “aa” ligado. Em
contrapartida, temos o “rd” e o “ra” ligados, uma vez que este servidor aceita consultas
recursivas.
Vamos voltar um pouco no tópico sobre “Flags” e retomar um campo que não tratamos
naquele momento: “RCODE – Response Code“. Este campo é preenchido pelo servidor
ao enviar sua resposta. Este campo é interpretado pelo DIG e formatado no bloco de
“status:”, também na seção “Header“.
Como exemplos do status de sucesso, você pode observar todas as queries utilizadas ao
longo deste artigo. Todas elas foram executadas com o status “NOERROR“.
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: NXDOMAIN, id: 21673
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: REFUSED, id: 50871
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
Neste caso, estamos enviando uma solicitação para um servidor que não possui
autoridade sobre o domínio pesquisado. Como este servidor não aceita recursividade,
então ele rejeita a solicitação.