Doggo - cliente de DNS em linha de comando fácil de usar
(doggo.mrkaran.dev)- Doggo é um cliente de DNS em linha de comando que mostra os resultados de consultas DNS em cores e formato de tabela, com foco em uma saída fácil de ler no terminal
- Em ambientes de automação, é possível usar saída em JSON, e a ferramenta também pode ser usada para análise de problemas com medição de tempo de resposta e modo de depuração
- Vários protocolos de transporte podem ser usados em uma única ferramenta, como DNS over HTTPS, TLS, QUIC, TCP, UDP e DNSCrypt
- Suporta recursos de EDNS como EDNS Client Subnet, NSID, DNS Cookies, EDNS Padding, Extended DNS Errors, além do tratamento de glue records
- Funciona em Linux, macOS, Windows, FreeBSD e NetBSD, e ainda oferece interface web e autocompletar de shell para uso tanto no CLI local quanto no navegador
Consultas DNS fáceis de ler no terminal
- Doggo se apresenta como um cliente de DNS em linha de comando feito para pessoas
- A saída padrão usa cores e formato baseado em tabelas, facilitando uma leitura rápida das respostas DNS
- Quando há necessidade de scripting ou parsing, é possível usar saída em JSON
- Também oferece modo de depuração e medição de tempo de resposta, permitindo verificar não só o resultado da consulta, mas também o processo de execução
Protocolos e dados DNS suportados
- Suporta vários protocolos de transporte DNS
- DNS over HTTPS
- DNS over TLS
- DNS over QUIC
- DNS over TCP
- DNS over UDP
- DNSCrypt
- Também inclui amplo suporte a recursos relacionados a EDNS
- Respostas com reconhecimento de localização por meio de EDNS Client Subnet (ECS)
- Name Server Identifier (NSID)
- DNS Cookies
- EDNS Padding
- Extended DNS Errors (EDE)
- Consegue processar glue records na additional section e dados auxiliares de DNS
- Para Internationalized Domain Names (IDN), oferece conversão automática para punycode
- Também lida com reverse DNS lookup e vários flags de DNS, como AA, AD, CD e DO
Configuração, resolvedores e ambiente de execução
- É possível usar as configurações
ndotsesearcha partir deresolv.confou de argumentos de linha de comando - É possível especificar vários resolvedores e também personalizar a estratégia de consulta
- Suporta tanto IPv4 quanto IPv6
- Oferece uma interface web em doggo.mrkaran.dev
- Oferece autocompletar de shell para
zshefish - As plataformas suportadas são Linux, macOS, Windows, FreeBSD e NetBSD
1 comentários
Comentários no Hacker News
Parece muito legal. Você poderia compartilhar mais sobre por que criou, as decisões de design e o contexto dos bastidores?
ndotse passei a querer criar um cliente DNS fácil de usar que não tivesse comportamentos inesperados por causa do ambiente do host.Fiz em Go, que é o que uso principalmente, e não quis adicionar dependências externas se não fossem realmente necessárias, então não usei nenhum framework de CLI. Gosto especialmente da parte em que criei um pequeno utilitário help.go para renderizar textos de ajuda com cores e formatação.
Com o tempo, recebi boas contribuições externas, especialmente do @jedisct1, que adicionou suporte a DNSCrypt. O lançamento da v1.0 ficou sendo adiado por mais de um ano; foi uma combinação de vida, outros projetos e um pouco de procrastinação, e só na semana passada eu defini um prazo e empurrei até o fim.
Post sobre
ndots: https://mrkaran.dev/posts/ndots-kubernetes/Excelente escolha de nome. Cachorros (doggo) gostam de cavar (dig)
digTambém é bom ter uma imagem Docker. Seria legal adicionar à documentação as opções
--rmpara limpar depois da execução e-tpara cores.docker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MXPode ser uma pergunta meio boba, mas por que toda a saída aparece duas vezes?
Quando executo
doggo google.com, recebo o mesmo registro A vindo de127.0.2.2:53e de127.0.2.3:53, e comdoggo news.ycombinator.comacontece o mesmo, mostrando resultados dos dois nameserversVocê consegue reproduzir especificando um nameserver customizado, como
@1.1.1.1?doggo google.com --shortretornou apenas142.250.185.238Seria muito bom se essa ferramenta desse suporte a um tipo de consulta equivalente a
ANYDeve sair em uma release em breve
Projeto bacana. Conheci no ano passado enquanto desenvolvia o x-cmd pkg; na época a versão mais recente era a 0.5.7, e agora está na 1.0.2, então parece que preciso atualizar a versão.
Também há um vídeo de demonstração: https://x-cmd.com/pkg/doggo
Me lembrou o https://github.com/ogham/dog
dog, escrito em Rust, e como o autor não conhecia Rust mas queria adicionar recursos, aproveitou como uma boa oportunidade para escrever um cliente DNS do zero em Go.Daí o nome também virou
dog + go => doggodogparece estar sem manutençãoExiste algum motivo para tantas ferramentas assim serem escritas em Go? Fico me perguntando se é por causa da biblioteca padrão ou se é só coincidência
É difícil dizer o mesmo de Python, Java, JavaScript, C# etc.
Muitas ferramentas, como k8s, Terraform e seus providers, foram escritas em Go, e ele costuma disputar popularidade com Python para escrever ferramentas internas
Segundo o README, ele foi inspirado no
dog, escrito em Rust, e como não conhecia Rust mas queria adicionar recursos, acabou escrevendo um cliente DNS próprio em Go. Por isso o nome também édog + go => doggo.https://github.com/ogham/dog
Isso tem relação com o Dog? As funcionalidades parecem quase idênticas.
Ambos exigem um tipo específico de consulta a executar (A, AAAA etc.); por que não usar como padrão uma consulta a todos os registros? Pelo menos ao consultar um único domínio, isso parece possível.
https://github.com/mr-karan/doggo
digpor padrão mostra só registros A, e mantive o comportamento igual.Fiquei em dúvida se você quer dizer todos os tipos de registros possíveis ou apenas alguns comuns como
MX, AAAA, A, CNAME, TXTParabéns pela release 1.0. O doggo tem sido minha principal ferramenta de DNS há um tempo, e eu gosto muito dele