DIG Crash Course
DIG Crash Course
O DIG é uma ferramenta para interrogar servidores de DNS.
Com o DIG nós conseguiremos fazer lookup de DNS com objetivos simples como troubleshooting por exemplo.
A ideia aqui é fazer um crash course dessa ferramenta.
Um Crash Course é um tipo de “curso rápido” sobre um determinado assunto, indo direto ao ponto de forma mais objetiva possível.
Quando devo usar o DIG?
Sempre que você precisar verificar alguma coisa em nível de DNS, seguem alguns cenários que o DIG pode te ajudar :
- para testar se a resolução de DNS está funcionando
- para comparar a resolução de DNS entre NS diferentes
- quando precisamos resolver um problema de DNS
- para descobrir o IP de um registro de DNS
- para descobrir o MX de um domínio
- para descobrir o NS de um domínio
- para descobrir o SOA de um domínio
- para descobrir o PTR (reverso) de um endereço IP
- para verificar se uma alteração de registro já fez efeito
Essas são algumas das situações mais básicas em que o DIG pode ser útil.
Para quem foi feito esse post?
Aqui o foco está nas pessoas atuando nas posições abaixo:
- Sysadmin;
- Cloud Native Engineer;
- Cloud Engineer;
- DevOps Engineer;
- Plataform Engineer;
- GitOps Engineer.
Momento Merchan :P
Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.
Aproveite e siga a CD Foundation e Cloud Native Foundation no twitter.
Colaboradores
Pessoas que colaboraram com o texto.
- Julia Lamenza (@jlamenza)
- João (@P0ssuidao)
- Rafael Gomex (@gomex)
- Rafael Silva (@rafaotetra)
Dig Crash Course
Aprendendo o básico para uso no dia a dia
fazendo uma pesquisa simples com todos os detalhes
$ dig gutocarvalho.net
fazendo uma pesquisa simples retornando só o IP
$ dig +short gutocarvalho.net
pesquisando o SOA do domínio
$ dig SOA gutocarvalho.net
pesquisando o NS do domínio
$ dig NS gutocarvalho.net
pesquisando o MX de correio
$ dig MX gutocarvalho.nmet
pesquisando o TTL do domínio
$ dig TTL gutocarvalho.net
pesquisando o PTR (reverso) de um IP
$ dig -x 8.8.8.8
pesquisando os registros TXT de um domínio
$ dig txt gutocarvalho.net
Explorando um pouco mais o DIG
pesquisando um registro em um NS específico
$ dig @1.1.1.1 lb.gutocarvalho
pesquisando as informações DNSSEC de um domínio
$ dig +dnssec gutocarvalho.net
pesquisando as chaves DNSSEC de um domínio
$ dig DNSKEY -qr gutocarvalho.net
pesquisando uma entrada de DNS com trace
$ dig +trace lb.gutocarvalho.net
verificando o tempo de resposta do SOA de um domínio
$ dig +nssearch gutocarvalho.net
Parâmetros interessantes do DIG
+short
$ dig gutocarvalho.net +short
185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153
O short só retorna os IPs para qual o registro aponta.
+tcp
$ dig +tcp gutocarvalho.net
Usado quando desejamos fazer a pesquisa via TCP, o padrão é UDP.
+time
$ dig +time=5 gutocarvalho.net
Define o timeout da pesquisa para 5 segundos.
+multiline
$ dig gutocarvalho.net A +dnssec +multiline
Vai pesquisar entradas A com DNSSEC associado em multi-linhas.
Filtrando saída do DIG com parâmetros especiais
Primeiro vamos fazer uma pesquisa comum para ter uma saída completa
$ dig gutocarvalho.net
; <<>> DiG 9.10.6 <<>> gutocarvalho.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40038
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net. IN A
;; ANSWER SECTION:
gutocarvalho.net. 300 IN A 185.199.108.153
gutocarvalho.net. 300 IN A 185.199.109.153
gutocarvalho.net. 300 IN A 185.199.110.153
gutocarvalho.net. 300 IN A 185.199.111.153
;; Query time: 38 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 18:53:55 -03 2022
;; MSG SIZE rcvd: 109
Agora vamos testando cada parâmetro
+noall
$ dig gutocarvalho.net +noall
; <<>> DiG 9.10.6 <<>> gutocarvalho.net +noall
;; global options: +cmd
Observe que o noall omite toda a saída do comando, ele normalmente é usado com outros comandos de forma composta, um exemplo é o answer.
+answer +noall
$ dig gutocarvalho.net +noall +answer
; <<>> DiG 9.10.6 <<>> gutocarvalho.net +noall +answer
;; global options: +cmd
gutocarvalho.net. 300 IN A 185.199.111.153
gutocarvalho.net. 300 IN A 185.199.108.153
gutocarvalho.net. 300 IN A 185.199.109.153
gutocarvalho.net. 300 IN A 185.199.110.153
O answer é útil junto com o noall, ele vai nos trazer apenas a resposta, sem comments, question, authority, stats e quaisquer outras informações que estiverem disponíveis na resposta.
+nocmd
dig +nocmd a lb.gutocarvalho.net +noall +answer
lb.gutocarvalho.net. 42 IN A 200.150.204.87
Quando aplicado retira a versao do bind e comando
; <<>> DiG 9.10.6 <<>> a lb.gutocarvalho.net +noall +answer
Para funcionar o parâmetro tem que vir logo após o comando dig
+nocomments
$ dig gutocarvalho.net +nocomments
; <<>> DiG 9.10.6 <<>> gutocarvalho.net +nocomments
;; global options: +cmd
;gutocarvalho.net. IN A
gutocarvalho.net. 297 IN A 185.199.110.153
gutocarvalho.net. 297 IN A 185.199.111.153
gutocarvalho.net. 297 IN A 185.199.108.153
gutocarvalho.net. 297 IN A 185.199.109.153
;; Query time: 29 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 18:58:57 -03 2022
;; MSG SIZE rcvd: 109
O nocomments retira toda a parte inicial da resposta
; <<>> DiG 9.10.6 <<>> gutocarvalho.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40925
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net. IN A
+noquestion
$ dig gutocarvalho.net +noquestion
; <<>> DiG 9.10.6 <<>> gutocarvalho.net +noquestion
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10078
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; ANSWER SECTION:
gutocarvalho.net. 300 IN A 185.199.108.153
gutocarvalho.net. 300 IN A 185.199.109.153
gutocarvalho.net. 300 IN A 185.199.110.153
gutocarvalho.net. 300 IN A 185.199.111.153
;; Query time: 42 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 19:01:58 -03 2022
;; MSG SIZE rcvd: 109
O noquestion retira essa parte da resposta
;; QUESTION SECTION:
;gutocarvalho.net. IN A
+nostats
$ dig gutocarvalho.net +nostats
; <<>> DiG 9.10.6 <<>> gutocarvalho.net +nostats
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63625
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net. IN A
;; ANSWER SECTION:
gutocarvalho.net. 300 IN A 185.199.109.153
gutocarvalho.net. 300 IN A 185.199.110.153
gutocarvalho.net. 300 IN A 185.199.111.153
gutocarvalho.net. 300 IN A 185.199.108.153
Esse parâmetro suprime as estatísticas da pesquisa.
;; Query time: 38 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 19:13:28 -03 2022
;; MSG SIZE rcvd: 109
+noauthority
;; AUTHORITY SECTION:
gutocarvalho.net. 3144 IN NS monroe.ns.cloudflare.com.
gutocarvalho.net. 3144 IN NS houston.ns.cloudflare.com.
É útil para remover essa parte da resposta, caso retorne o authority na pesquisa.
+noadditional
;; ADDITIONAL SECTION:
lia.ns.cloudflare.com. 84354 IN A 173.245.58.185
lia.ns.cloudflare.com. 170762 IN AAAA 2400:cb00:2049:1::adf5:3ab9
mark.ns.cloudflare.com. 170734 IN A 173.245.59.130
mark.ns.cloudflare.com. 170734 IN AAAA 2400:cb00:2049:1::adf5:3b82
A seção aditional pode trazer informações como o IP dos DNS Server autoritativos da seção authority, esse parâmetro suprime esse trecho.
+norec
$ dig +norec @monroe.ns.cloudflare.com. gutocarvalho.net a
Essa opção desabilita a pesquisa recursiva, neste caso a CloudFlare e responsável por responder por meu domínio, sendo que o servidor monroe é um dos meus servidores DNS, ele já sabe a resposta.
Pesquisas parametrizadas comuns
pesquisa comum e rápida que retorna apenas o endereço IP
$ dig +short lb.gutocarvalho.net
pesquisando por registro A com resposta simples
$ dig +nocmd lb.gutocarvalho.net a +noall +answer
pesquisando por CNAME com resposta simples
$ dig +nocmd mail.google.com cname +noall +answer
pesquisando por registro TXT com resposta simples
$ dig +nocmd google.com txt +noall +answer
fazendo pesquisa em múltiplos domínios
$ dig ubuntu.com mx +noall +answer redhat.com ns +noall +answer
Pesquisa usando um arquivo (bulk)
Imagine que você tem o arquivo dominios.txt com o conteúdo abaixo
gutocarvalho.net
nativetrail.io
viahorizonte.life
vamos rodar agora uma pesquisa contra o arquivo
$ dig -f dominios.txt +short
saída
185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153
185.199.111.153
185.199.108.153
185.199.109.153
185.199.110.153
185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153
:)
Quer saber mais?
Para saber mais veja o help do comando
$ dig --help
Para ir além acesse a manpage
$ man dig
Configurando seu .digrc
O dig tem um arquivo de configuração, o famoso .digrc.
$ echo "+nostats +nocomments +nocmd +noquestion +recurse" > ~/.digrc
Agora você digita menos e tem o resultado desejado.
Um pouco de teoria de DNS para quem gosta :)
Entendendo o funcionamento do DIG
Imagine que mandamos essa query pelo dig
$ dig gutocarvalho.net
Essa query é estrutura da seguinte forma pelo DIG para o servidor de DNS autoritativo
+-------------------------------------+
Header | OPCODE=SQUERY |
+-------------------------------------+
Question | QNAME=GUTO.NET., QCLASS=IN, QTYPE=A |
+-------------------------------------+
Answer | <empty> |
+-------------------------------------+
Authority | <empty> |
+-------------------------------------+
Additional | <empty> |
+-------------------------------------+
A resposta do servidor que responde pelo domínio foi essa
; <<>> DiG 9.10.6 <<>> gutocarvalho.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48153
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net. IN A
;; ANSWER SECTION:
gutocarvalho.net. 300 IN A 185.199.110.153
gutocarvalho.net. 300 IN A 185.199.111.153
gutocarvalho.net. 300 IN A 185.199.108.153
gutocarvalho.net. 300 IN A 185.199.109.153
;; Query time: 146 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sun Mar 13 10:37:26 -03 2022
;; MSG SIZE rcvd: 109
Podemos estruturar dessa forma para entender melhor
+--------------------------------------------+
Header | OPCODE=SQUERY, RESPONSE, AA |
+--------------------------------------------+
Question | QNAME=GUTO.NET., QCLASS=IN, QTYPE=A |
+--------------------------------------------+
Answer | GUTO.NET. 300 IN A 185.199.108.153 |
| 300 IN A 185.199.109.153 |
| 300 IN A 185.199.110.153 |
| 300 IN A 185.199.111.153 |
+--------------------------------------------+
Authority | <empty> |
+--------------------------------------------+
Additional | <empty> |
+--------------------------------------------+
Entendendo as repostas entregues pelo DIG
Uma resposta de consulta do DIG vem composta por informações separadas nas seções Header, Question, Answer, Authority e Additional.
+------------+
| Header | Cabeçalho com informações diversas
+------------+
| Question | A questão enviada para o nameserver
+------------+
| Answer | Registros que vão responder a query
+------------+
| Authority | Registros da autoridade do domínio
+------------+
| Additional | Registros com informações adicionais
+------------+
Vamos entender cada uma delas.
- Header section, um cabeçalho fixo que contém ID, flgas e informações das outras seções (contadores)
- Question section, contém a query que foi passada (QNAME), o tipo (QTYPE) e a classe (QCLLASS). Na resposta receberemos novamente a query
- Answer section, pode conter a lista de reguistros, se houver resposta cada um irá trazer QNAME, QTYPE, QCLASS, TTL e informaçÕes de RDATA
- Authority section, pode conter a lista de registros que apontam para os servidores autoritativos
- Additional section, pode conter outros registros e mais informações sobre os servidores autoritativos
HEADER SECTION
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63625
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
Informações que encontramos do HEADER
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z|AD|CD| RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Entendendo as informações do HEADER
QR pode conter
- 0, QUERY
- 1, RESPONSE
OPCODE pode conter os seguintes valores:
- 0 Query [RFC1035]
- 2 Status [RFC1035]
- 3 Unassigned
- 4 Notify [RFC1996]
- 5 Update [RFC2136]
- 6 DNS Stateful Operations (DSO) [RFC8490]
- 7-15 Unassigned
No Header vamos encontrar as seguintes FLAGs:
- AA: Authoritative Answer (set by the server)
- TC: message is TrunCated (set by the server)
- RD: Recursion Desired (set by the client and copied to the response)
- RA: Recursion Available (set by the server)
- AD: Authenticated Data, DNSSEC flag (set by the server)
- CD: Checking Disabled, DNSSEC flag (set by the client, copied to the response)
No Header vamos encontrar o RCODE/Status (4 bits) que pode conter:
- 0 NoError No Error [RFC1035]
- 1 FormErr Format Error [RFC1035]
- 2 ServFail Server Failure [RFC1035]
- 3 NXDomain Non-Existent Domain [RFC1035]
- 4 NotImp Not Implemented [RFC1035]
- 5 Refused Query Refused [RFC1035]
- 6 YXDomain Name Exists when it should not [RFC2136][RFC6672]
- 7 YXRRSet RR Set Exists when it should not [RFC2136]
- 8 NXRRSet RR Set that should exist does not [RFC2136]
- 9 NotAuth Server Not Authoritative for zone [RFC2136]
- 9 NotAuth Not Authorized [RFC8945]
- 10 NotZone Name not contained in zone [RFC2136]
- 11 DSOTYPENI DSO-TYPE Not Implemented [RFC8490]
- 12-15 Unassigned
- 16 BADVERS Bad OPT Version [RFC6891]
- 16 BADSIG TSIG Signature Failure [RFC8945]
- 17 BADKEY Key not recognized [RFC8945]
- 18 BADTIME Signature out of time window [RFC8945]
- 19 BADMODE Bad TKEY Mode [RFC2930]
- 20 BADNAME Duplicate key name [RFC2930]
- 21 BADALG Algorithm not supported [RFC2930]
- 22 BADTRUNC Bad Truncation [RFC8945]
- 23 BADCOOKIE Bad/missing Server Cookie [RFC7873]
- 24-3840 Unassigned
- 3841-4095 Reserved for Private Use [RFC6895]
- 4096-65534 Unassigned
- 65535 Reserved, can be allocated by Standards Action [RFC6895]
No Header também temos contadores, são eles:
- QDCOUNT, número de respostas da seção queries
- ANCOUNT, número de respostas da seção answers
- NSCOUNT, número de respostas da seção autoritativos
- ARCOUNT, número de respostas da seção adicional
Os contadores vão retornar o número de registros encontrados na pesquisa
Entendendo um pouco mais das Flags do HEADER
Você verá que na resposta teremos geralmente 4 flags setadas, sao elas:
- qr, rd, ra, ad.
Vamos entendê-las agora
- QR, é uma flag diferente que pode retornar 0 ou 1, 1 significa query
- RD significa "recursive desired", sinaliza que desejamos usar pesquisa recursiva, isso é definido pelo cliente.
- RA significa "recursive available", sinaliza que pesquisa recursiva está disponível, isso é definiado pelo servidor.
- AD significa "authenticated data", sinaliza que os dados de resposta e autoridade foram validados e autenticados pelas políticas de segurança daquele servidor de dns. É setado apenas quando todos os dados da resposta foram devidamente criptografados e verificados. Esse é um recurso do DNSSEC.
Existem ainda as seguintes flags opcionais
- AA, significa servidor autoritativo
- TC, significa mensagem truncada
E no caso de DNSSEC pode conter ainda
- CD, significa "checking disabled", utilizado pelo DNSSEC.
- DO, que significa que a resposta do DNSSEC está ok
Entendendo os status (RCODE) mais comuns
- NOERROR (0), a pesquisa voltou sem erros
- SERVFAIL (2), houve uma falha na resposta do servidor
- NXDOMAN (3), o domínio não foi encontrado ou não existe
- REFUSED (5), o pedido de query foi recusado
QUESTION SECTION
Aqui encontraremos dados de nossa query.
;; QUESTION SECTION:
;gutocarvalho.net. IN A
Uma query é estruturada da seguinte forma:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Vamos entender QNAME, QTYPE e QCLASS.
- QNAME possuirá o domínio que você setou na query
- QTYPE possuirá o tipo de RR que você utilizou na pesquisa
- QCLASS possuirá o tipo de classe de DNS, geralmente IN (internet)
ANSWER SECTION
;; ANSWER SECTION:
gutocarvalho.net. 300 IN A 185.199.108.153
gutocarvalho.net. 300 IN A 185.199.109.153
gutocarvalho.net. 300 IN A 185.199.110.153
gutocarvalho.net. 300 IN A 185.199.111.153
Retorna os registros e informações destes, se houver.
AUTHORITY SECTION
;; AUTHORITY SECTION:
gutocarvalho.net. 3533 IN NS monroe.ns.cloudflare.com.
gutocarvalho.net. 3533 IN NS houston.ns.cloudflare.com.
Retorna dados de autoridade acerca do domínio.
ADITIONAL SECTION
;; ADDITIONAL SECTION:
monroe.ns.cloudflare.com. 107 IN A 172.64.34.153
houston.ns.cloudflare.com. 900 IN A 172.64.35.52
Retorna dados adicionais da query.
QUERY SECTION
;; Query time: 36 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 19:49:29 -03 2022
;; MSG SIZE rcvd: 109
Retorna métricas da query, auto explicativo.
Glossário
termos comuns
- Zona, Uma zona contém as informações e registros de um domínio
- TTL, significa Time to live, é o tempo de vida de um registro ou zona
- DNSSEC, é um sistema de proteção que aumenta a segurança do DNS
tipos de registros comuns e seus significados
- SOA, Start of Authority ou início de autoridade
- NS, significa nameserver, esse registro aponta para um servidor de DNS
- A, registro tipo endereço ipv4, é associado a um endereço IP
- AAAA, registro tipo endereço ipv6, é associado a um endereço IP
- PTR, registro tipo reverso, ele resolve um IP para um nome
- CNAME, nome canônico, ele resolve um nome para outro nome.
- MX, significa mail exchange, aponta para o servidor de correio
- TXT, registros de texto, podem ter qualquer tipo de informação
tipos de registro para DNSSEC
- DNSKEY: keeps the public key to verify RRSIGs
- DS: keeps the digest of a DNSKEY RR
- RRSIG: keeps the digital signature of an RRset
- NSEC: used for authenticated denial existence, meaning to show an RRset is not part of a signed zone
tipos de pesquisa de DNS
- Iterative approach: where the resolver/client repeatedly queries different servers until it finds the answer
- Recursive approach: where the resolver/client sends the query only to a single server, but the server repeatedly queries different servers until it finds and returns the answer to the resolver
Quais outras ferramentas uso para troubleshooting de DNS?
ferramentas clássicas
- nslookup
- host
- whois
ferramentas extras para testes do lado do cliente
- dnsprobe
- dnstracer
- subfinder (para encontrar subdomains)
- dnsviz (avalia comportamento do seu DNS Server/DNSSEC)
ferramentas extras para testes em seu servidor de dns
- dnstop (métricas)
- dnsperf (teste de carga)
- flamethrower (teste de carga)
- dnsblast (teste de carga)
Quais os comandos que eu mais uso no dia-a-dia?
$ dig +short lb.gutocarvalho.net
$ dig -x 200.150.204.87
$ dig mx gutocarvalho.net
$ dig ns gutocarvalho.net
Amarrando as pontas
Esse post é uma tentativa de dar um norte ou um caminho para fazer um bom troubleshooting de DNS.
Volte aqui sempre que precisar :)
Aquele abraço!
Mando aquele abraço para o professor MESTRE Ulysses Almeida (@ulyssesalmeida) que me ensinou a usar o DIG lá no início do século.
Mando aquele abraço pro @gomex e @badtux que via exemplo me fazem contribuir mais e mais e mais :)
Mando aquele abraço para todos que leram, comentaram, revisaram e contribuíram de alguma forma com esse post!
DNS RFC’s
References
- https://linux.die.net/man/1/dig
- https://cmdref.net/os/linux/command/dig.html
- https://ipok.com.br/blog/usando-dig-para-pesquisas-de-dns-parte-1
- https://ipok.com.br/blog/usando-dig-para-pesquisas-de-dns-parte-2
- https://linuxize.com/post/how-to-use-dig-command-to-query-dns-in-linux
- https://www.hostinger.com/tutorials/how-to-use-the-dig-command-in-linux
- https://metebalci.com/blog/a-short-practical-tutorial-of-dig-dns-and-dnssec
- https://neverendingsecurity.wordpress.com/2015/04/13/dig-commands-cheatsheet
Este post é do tipo #Mindnodes, entenda aqui.
Se gostou manda um alô no twitter @gutocarvalho ou deixa um comentário bacana :)
[s]
Guto