Doggo - cliente DNS de línea de comandos fácil de usar
(doggo.mrkaran.dev)- Doggo es un cliente de línea de comandos para consultas DNS que muestra los resultados con colores y en formato de tabla, con el objetivo de ofrecer una salida fácil de leer en la terminal
- En entornos de automatización se puede usar salida JSON, y también sirve para analizar problemas con medición de tiempo de respuesta y modo de depuración
- Puede manejar varios protocolos de transporte en una sola herramienta, como DNS over HTTPS, TLS, QUIC, TCP, UDP y DNSCrypt
- Soporta funciones EDNS como EDNS Client Subnet, NSID, DNS Cookies, EDNS Padding, Extended DNS Errors, además del manejo de glue records
- Funciona en Linux, macOS, Windows, FreeBSD y NetBSD, y además ofrece interfaz web y autocompletado de shell para usarse tanto en el CLI local como en el navegador
Consultas DNS fáciles de leer en la terminal
- Doggo se presenta como un cliente DNS de línea de comandos pensado para personas
- La salida predeterminada usa colores y un formato basado en tablas, lo que facilita revisar rápidamente las respuestas DNS
- Si se necesita scripting o parsing, se puede usar salida JSON
- También incluye modo de depuración y medición del tiempo de respuesta, para revisar no solo el resultado de la consulta sino también el proceso de ejecución
Protocolos DNS y datos compatibles
- Soporta varios protocolos de transporte DNS
- DNS over HTTPS
- DNS over TLS
- DNS over QUIC
- DNS over TCP
- DNS over UDP
- DNSCrypt
- También incluye ampliamente funciones relacionadas con EDNS
- Respuestas con reconocimiento de ubicación mediante EDNS Client Subnet (ECS)
- Name Server Identifier (NSID)
- DNS Cookies
- EDNS Padding
- Extended DNS Errors (EDE)
- Puede procesar glue records y datos DNS auxiliares de la additional section
- Los Internationalized Domain Names (IDN) cuentan con conversión automática a punycode
- También puede manejar consultas Reverse DNS y varias banderas DNS como AA, AD, CD y DO
Configuración, resolvers y entorno de ejecución
- Se pueden usar las configuraciones
ndotsysearchdesderesolv.confo desde argumentos de línea de comandos - Se pueden especificar varios resolvers y también personalizar la estrategia de consulta
- Soporta tanto IPv4 como IPv6
- Ofrece una interfaz web en doggo.mrkaran.dev
- Incluye autocompletado de shell para
zshyfish - Las plataformas compatibles son Linux, macOS, Windows, FreeBSD y NetBSD
1 comentarios
Opiniones en Hacker News
Se ve realmente genial. ¿Podrías compartir más sobre por qué lo creaste, las decisiones de diseño y el contexto detrás de escena?
ndotsy quise crear un cliente DNS fácil de usar que no tuviera comportamientos inesperados por culpa del entorno del host.Lo hice en Go, que es lo que uso principalmente, y como no quería agregar dependencias externas si no eran estrictamente necesarias, no usé ningún framework de CLI. Me gusta especialmente haber creado una pequeña utilidad help.go para renderizar texto de ayuda con colores y formato.
Con el tiempo recibí buenas contribuciones externas, en especial la de @jedisct1, que agregó soporte para DNSCrypt, algo importante. El lanzamiento de v1.0 se fue posponiendo durante más de un año por una mezcla de vida, otros proyectos y algo de procrastinación, y recién la semana pasada me puse una fecha límite y lo saqué adelante.
Artículo sobre
ndots: https://mrkaran.dev/posts/ndots-kubernetes/Excelente elección de nombre. A los perritos (doggo) les gusta cavar (dig).
dig.También está bueno que haya una imagen de Docker. Sería bueno agregar en la documentación las opciones
--rmpara limpiar después de ejecutar y-tpara los colores.docker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MXQuizá sea una pregunta un poco tonta, pero ¿por qué toda la salida aparece dos veces?
Cuando ejecuto
doggo google.com, aparecen los mismos registros A desde127.0.2.2:53y127.0.2.3:53; condoggo news.ycombinator.compasa lo mismo, se imprimen los resultados de dos servidores de nombres.¿Puedes reproducirlo especificando un servidor de nombres personalizado como
@1.1.1.1?doggo google.com --shortme devolvió solo142.250.185.238.Sería muy bueno que esta herramienta admitiera un tipo de consulta equivalente a
ANY.Lo voy a publicar pronto.
Gran proyecto. Lo conocí el año pasado mientras desarrollaba x-cmd pkg; en ese momento la versión más reciente era la 0.5.7, y ahora ya está en 1.0.2, así que parece que toca actualizar la versión.
También hay un video demo: https://x-cmd.com/pkg/doggo
Me recuerda a https://github.com/ogham/dog
dog, escrito en Rust; como no sabía Rust pero quería agregar funciones, lo tomó como una buena oportunidad para escribir desde cero un cliente DNS en Go.Por eso el nombre también es
dog + go => doggo.dogya no tiene mantenimiento.¿Hay alguna razón por la que muchas de estas herramientas estén escritas en Go? Me pregunto si será por la biblioteca estándar o si es pura casualidad.
Es difícil decir lo mismo de Python, Java, JavaScript, C#, etc.
Muchas herramientas como k8s, Terraform y sus providers están escritas en Go, y para herramientas internas suele competir en popularidad con Python.
Según el README, se inspiró en
dog, escrito en Rust, y como no sabía Rust pero quería agregar funciones, decidió escribir él mismo un cliente DNS en Go. Por eso el nombre también esdog + go => doggo.https://github.com/ogham/dog
¿Esto está relacionado con Dog? Las funciones se ven casi idénticas.
Ambos requieren indicar una consulta específica a ejecutar (A, AAAA, etc.); ¿por qué no usar como valor predeterminado consultar todos los registros? Al menos al consultar un solo dominio parece algo viable.
https://github.com/mr-karan/doggo
digpor defecto solo muestra registros A, y mantuve el mismo comportamiento.Me pregunto si te refieres a todos los tipos de registro posibles, o a algunos de los comunes como
MX, AAAA, A, CNAME, TXT.Felicitaciones por el lanzamiento 1.0. doggo ha sido mi herramienta DNS principal desde hace un tiempo y me encanta.