Pesquisar no DNS

doggo

Posted by     "rbits" on Thursday, April 29, 2021

TOC

Histórico

Se voce trabalha no suporte ou desenvolve soluções web, esse é um utilitário que você precisa conhecer. Ele permite para fazer pesquisa nos dados dos servidores DNS de forma muito simples.

Se você desenvolve soluções web e precisou confirmar se o servidor de email está configurado corretamente, o utilitário doggo pode ajudar a resolver o problema.

doggo é um utiltário de linha de comando desenvolvido em Goland que atua como cliente de um servidor DNS (como o dig, outro cliente de DNS). Sua informação é bastante concisa e amigável. Oferece suporte além dos normais, HTTPS (DoH) e TLS (DoT).

Ele foi inspirado no utilitário dog que foi desenvolvido em Rust, por isso o nome dog +go => doggo.

Funcionalidades

  • Oferece resultado amigável e com suporte cores and tabular(tabelas).
  • Oferece suporte ao formato JSON que pode ser util em operações com scripts.
  • Oferece suporte a multiplos protocolos de transporte:
    • DNS over HTTPS (DoH)
    • DNS over TLS (DoT)
    • DNS over TCP
    • DNS over UDP
  • Oferece suporte ndots e configuração search pelo arquivo resolv.conf ou como parâmetro de linha de comando.
  • Oferece suporte a multiplos servidores de uma vez.
  • Oferece suporte IPv4 e IPv6 ambos.

Instalação

Tem versão disponibilizada para diversas plataformas Linux, MacOS e Windows pelo site Doggo.

Para quem gosta de Linux ou faz uso da funcionalidade WSL do Windows 10:

$ cd "$(mktemp -d)" --> cria um diretório temporário no /tmp
$ curl -sL "https://github.com/mr-karan/doggo/releases/download/v0.2.0/doggo_0.2.0_linux_amd64.tar.gz" | tar xz --> baixa o arquivo com o utilitario curl(semelhante wget)
$ mv doggo /usr/local/bin --> move o arquivo doggo para o diretório /usr/local/bin
# doggo --> verificar se está no PATH
$ doggo

Exemplos de uso do comando doggo

Simples pesquisa no dominio mrkaran.dev

$ doggo mrkaran.dev                                                                         
NAME            TYPE    CLASS   TTL     ADDRESS         NAMESERVER   
mrkaran.dev.    A       IN      20s     13.250.205.9    127.0.0.1:53
mrkaran.dev.    A       IN      20s     206.189.89.118  127.0.0.1:53

Pesquisa dos registros MX no dominio github.com usando 9.9.9.9 como servidor de dns (resolver)

doggo MX github.com @9.9.9.9
NAME            TYPE    CLASS   TTL     ADDRESS                         NAMESERVER 
github.com.     MX      IN      3600s   10 alt3.aspmx.l.google.com.     9.9.9.9:53
github.com.     MX      IN      3600s   5 alt1.aspmx.l.google.com.      9.9.9.9:53
github.com.     MX      IN      3600s   10 alt4.aspmx.l.google.com.     9.9.9.9:53
github.com.     MX      IN      3600s   5 alt2.aspmx.l.google.com.      9.9.9.9:53
github.com.     MX      IN      3600s   1 aspmx.l.google.com.           9.9.9.9:53

ou usando o parametro de linha de comando (-t):

$ doggo -t MX -n 9.9.9.9 github.com
NAME            TYPE    CLASS   TTL     ADDRESS                         NAMESERVER 
github.com.     MX      IN      3600s   10 alt3.aspmx.l.google.com.     9.9.9.9:53
github.com.     MX      IN      3600s   5 alt1.aspmx.l.google.com.      9.9.9.9:53
github.com.     MX      IN      3600s   10 alt4.aspmx.l.google.com.     9.9.9.9:53
github.com.     MX      IN      3600s   5 alt2.aspmx.l.google.com.      9.9.9.9:53
github.com.     MX      IN      3600s   1 aspmx.l.google.com.           9.9.9.9:53

Pesquisa de registros no dominio archive.org usando o servidor DNS Cloudflare e protocolo de transporte https (resolver)

$ doggo archive.org @https://cloudflare-dns.com/dns-query 
NAME            TYPE    CLASS   TTL     ADDRESS         NAMESERVER                           
archive.org.    A       IN      41s     207.241.224.2   https://cloudflare-dns.com/dns-query

Pesquisa de registros no dominio internetfreedom.in com a saida no formato JSON

$ doggo internetfreedom.in --json | jq
{
  "responses": {
    "answers": [
      {
        "name": "internetfreedom.in.",
        "type": "A",
        "class": "IN",
        "ttl": "22s",
        "address": "104.27.158.96",
        "rtt": "37ms",
        "nameserver": "127.0.0.1:53"
      },
      {
        "name": "internetfreedom.in.",
        "type": "A",
        "class": "IN",
        "ttl": "22s",
        "address": "104.27.159.96",
        "rtt": "37ms",
        "nameserver": "127.0.0.1:53"
      },
      {
        "name": "internetfreedom.in.",
        "type": "A",
        "class": "IN",
        "ttl": "22s",
        "address": "172.67.202.77",
        "rtt": "37ms",
        "nameserver": "127.0.0.1:53"
      }
    ],
    "queries": [
      {
        "name": "internetfreedom.in.",
        "type": "A",
        "class": "IN"
      }
    ]
  }
}

Pesquisa de registros no dominio duckduckgo.com e mostrando o RTT (Round Trip Time)

$ doggo duckduckgo.com --time                
NAME            TYPE    CLASS   TTL     ADDRESS         NAMESERVER      TIME TAKEN 
duckduckgo.com. A       IN      30s     40.81.94.43     127.0.0.1:53    45ms      

Parâmetros de Linha de Comando

Opções de Transporte (Comunicação)

Se nada estiver definido, o esquema padrão de comunicação com o servidor DNS é o protocolo udp.

  @udp://        eX: @1.1.1.1 initiates a UDP resolver for 1.1.1.1:53.
  @tcp://        eX: @1.1.1.1 initiates a TCP resolver for 1.1.1.1:53.
  @https://      eX: @https://cloudflare-dns.com/dns-query initiates a DOH resolver for Cloudflare DoH server.
  @tls://        eX: @1.1.1.1 initiates a DoT resolver for 1.1.1.1:853.

Opções de pesquisa

  -q, --query=HOSTNAME        Hostname to query the DNS records for (eg mrkaran.dev).
  -t, --type=TYPE             Type of the DNS Record (A, MX, NS etc).
  -n, --nameserver=ADDR       Address of a specific nameserver to send queries to (9.9.9.9, 8.8.8.8 etc).
  -c, --class=CLASS           Network class of the DNS record (IN, CH, HS etc).

Opções de resolver

  --ndots=INT        Specify ndots parameter. Takes value from /etc/resolv.conf if using the system nameserver or 1 otherwise.
  --search           Use the search list defined in resolv.conf. Defaults to true. Set --search=false to disable search list.
  --timeout          Specify timeout (in seconds) for the resolver to return a response.
  -4 --ipv4          Use IPv4 only.
  -6 --ipv6          Use IPv6 only.

Opções de Saida

  -J, --json                  Format the output as JSON.
  --color                     Defaults to true. Set --color=false to disable colored output.
  --debug                     Enable debug logging.
  --time                      Shows how long the response took from the server.

Documentos

doggo Site do projeto doggo.

  • dig Testando o DNS com a Ferramenta dig do BIND.

Perguntas Mais Frequentes

*O doggo é gratuito? Sim.