Doggo – Benutzerfreundlicher DNS-Client für die Kommandozeile
(doggo.mrkaran.dev)- Doggo ist ein Kommandozeilen-Client, der DNS-Abfrageergebnisse farblich hervorgehoben und im Tabellenformat darstellt und auf gut lesbare Ausgabe im Terminal ausgelegt ist
- In Automatisierungsumgebungen kann JSON-Ausgabe verwendet werden; mit Messung der Antwortzeit und Debug-Modus eignet sich das Tool auch zur Problemanalyse
- DNS over HTTPS, TLS, QUIC, TCP, UDP und DNSCrypt sowie weitere Transportprotokolle lassen sich mit einem einzigen Tool nutzen
- Es unterstützt EDNS-Funktionen wie EDNS Client Subnet, NSID, DNS Cookies, EDNS Padding, Extended DNS Errors sowie die Verarbeitung von Glue Records
- Es läuft auf Linux, macOS, Windows, FreeBSD und NetBSD und bietet sowohl eine Weboberfläche als auch Shell-Vervollständigung, sodass es lokal per CLI und im Browser genutzt werden kann
Leicht lesbare DNS-Abfragen im Terminal
- Doggo versteht sich als DNS-Kommandozeilen-Client für Menschen
- Die Standardausgabe ist farblich hervorgehoben und tabellenbasiert aufgebaut, sodass sich DNS-Antworten schnell überblicken lassen
- Wenn Scripting oder Parsing benötigt wird, kann JSON-Ausgabe verwendet werden
- Ein Debug-Modus und die Messung der Antwortzeit zeigen nicht nur das Ergebnis der Abfrage, sondern auch den Ablauf der Verarbeitung
Unterstützte DNS-Protokolle und Daten
- Es unterstützt mehrere DNS-Transportprotokolle
- DNS over HTTPS
- DNS over TLS
- DNS over QUIC
- DNS over TCP
- DNS over UDP
- DNSCrypt
- Auch EDNS-bezogene Funktionen sind umfassend enthalten
- standortbezogene Antworten über EDNS Client Subnet (ECS)
- Name Server Identifier (NSID)
- DNS Cookies
- EDNS Padding
- Extended DNS Errors (EDE)
- Glue Records und zusätzliche DNS-Daten aus der Additional Section können verarbeitet werden
- Für Internationalized Domain Names (IDN) wird die automatische Punycode-Umwandlung unterstützt
- Auch Reverse DNS Lookup sowie verschiedene DNS-Flags wie AA, AD, CD und DO werden unterstützt
Konfiguration, Resolver und Laufzeitumgebung
resolv.confoder Kommandozeilenargumente können für die Einstellungenndotsundsearchverwendet werden- Es können mehrere Resolver angegeben werden, und auch die Abfragestrategie lässt sich anpassen
- Sowohl IPv4 als auch IPv6 werden unterstützt
- Unter doggo.mrkaran.dev steht eine Weboberfläche zur Verfügung
- Shell-Vervollständigung für
zshundfishist vorhanden - Unterstützte Plattformen sind Linux, macOS, Windows, FreeBSD und NetBSD
1 Kommentare
Hacker-News-Kommentare
Sieht wirklich großartig aus. Kannst du mehr darüber erzählen, warum du es gebaut hast, welche Designentscheidungen dahinterstecken und welchen Hintergrund es gibt?
ndotskennengelernt. Dadurch wollte ich einen einfach zu bedienenden DNS-Client bauen, der sich nicht wegen der Host-Umgebung unerwartet verhält.Ich habe ihn in Go geschrieben, das ich hauptsächlich nutze, und wollte keine externen Abhängigkeiten hinzufügen, wenn es nicht unbedingt nötig ist; deshalb habe ich kein CLI-Framework verwendet. Besonders gefällt mir, dass ich ein kleines help.go-Utility gebaut habe, das Hilfetexte mit Farben und Formatierung rendert.
Mit der Zeit gab es auch gute externe Beiträge, besonders wichtig war, dass @jedisct1 DNSCrypt-Support hinzugefügt hat. Das v1.0-Release wurde über ein Jahr lang immer wieder verschoben; das lag an Leben, anderen Projekten und etwas Prokrastination. Erst letzte Woche habe ich mir eine Deadline gesetzt und es durchgezogen.
Artikel zu
ndots: https://mrkaran.dev/posts/ndots-kubernetes/Die Namenswahl ist großartig. Ein Hund (doggo) liebt es schließlich zu graben (dig)
digSchön, dass es auch ein Docker-Image gibt. In der Doku wären
--rmzum Aufräumen nach der Ausführung und die Option-tfür Farben eine gute Ergänzung.docker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MXVielleicht eine etwas dumme Frage, aber warum erscheint die Ausgabe komplett zweimal?
Wenn ich
doggo google.comausführe, bekomme ich denselben A-Record jeweils von127.0.2.2:53und127.0.2.3:53; beidoggo news.ycombinator.comwerden ebenso die Ergebnisse von zwei Nameservern ausgegeben.Kannst du das mit einem benutzerdefinierten Nameserver wie
@1.1.1.1reproduzieren?doggo google.com --shorthat bei mir nur142.250.185.238zurückgegeben.Es wäre wirklich schön, wenn dieses Tool einen Abfragetyp unterstützen würde, der
ANYentspricht.Wird bald veröffentlicht.
Tolles Projekt. Ich habe es letztes Jahr kennengelernt, als ich x-cmd pkg entwickelt habe; damals war die neueste Version 0.5.7, jetzt ist es 1.0.2, daher sieht es so aus, als wäre ein Versionsupgrade nötig.
Es gibt auch ein Demo-Video: https://x-cmd.com/pkg/doggo
Erinnert mich an https://github.com/ogham/dog
doginspiriert, das in Rust geschrieben ist. Da der Autor kein Rust kannte, aber Features hinzufügen wollte, sah er darin eine gute Gelegenheit, einen DNS-Client in Go von Grund auf zu schreiben.Daher auch der Name:
dog + go => doggodognicht mehr gewartet zu werden.Gibt es einen Grund, warum so viele solcher Tools in Go geschrieben werden? Liegt es an der Standardbibliothek, oder ist das einfach Zufall?
Bei Python, Java, JavaScript, C# usw. kann man das schwerlich genauso sagen.
Viele Tools wie k8s, Terraform und dessen Provider sind in Go geschrieben, und bei internen Tools konkurriert es in der Beliebtheit oft mit Python.
Laut README wurde es von
doginspiriert, das in Rust geschrieben ist. Da der Autor kein Rust konnte, aber Features hinzufügen wollte, schrieb er selbst einen DNS-Client in Go. Daher auch der Name:dog + go => doggo.https://github.com/ogham/dog
Hat das etwas mit Dog zu tun? Die Funktionalität sieht fast identisch aus.
Beide verlangen, dass man eine konkrete Abfrage angibt, die ausgeführt werden soll (A, AAAA usw.). Warum ist die Voreinstellung nicht, alle Records abzufragen? Zumindest bei einer einzelnen Domain scheint das möglich.
https://github.com/mr-karan/doggo
digzeigt standardmäßig nur A-Records an, und ich habe das Verhalten gleich gehalten.Ich frage mich, ob du wirklich alle möglichen Record-Typen meinst oder eher ein paar gängige wie
MX, AAAA, A, CNAME, TXT.Glückwunsch zum 1.0-Release. doggo ist schon seit einer Weile mein wichtigstes DNS-Tool, und ich mag es wirklich sehr.