6 Punkte von GN⁺ 2024-01-08 | 1 Kommentare | Auf WhatsApp teilen
  • dns.toys ist ein DNS-Server, der DNS-Abfragen wie ein Command-Interface nutzt und kleine Utilities direkt im Terminal allein mit dig ausführen lässt
  • Aufgaben, für die man ungern erst eine Suchseite öffnet, lassen sich direkt erledigen: Weltzeit, Wetter, über 70 Einheitenumrechnungen sowie Währungsumrechnung auf Basis täglicher Wechselkurse
  • Auch für Entwickler nützliche Funktionen sind dabei, etwa CIDR-Bereichsberechnung, Erzeugung von UUID v4 und NanoID, Unix-Epoch-Konvertierung sowie Umrechnung zwischen Zahlensystemen
  • Aufgerufen wird der Dienst durch Angabe von @dns.toys; in Bash, Fish und Zsh kann man zusätzlich den Alias dy einrichten, um ihn kürzer zu nutzen
  • Eher ein Dienst für Spaß und Komfort beim schnellen Nachschlagen und Rechnen im Terminal als ein Werkzeug für den produktiven Einsatz; gut geeignet für einfache Abfragen

Terminal-Utilities per DNS-Abfrage ausführen

  • dns.toys stellt mehrere Funktionen über einen DNS-Server bereit; Abfragen im Domain-Format werden mit dig gesendet und ausgeführt
  • Zeit, Wetter und Umrechnung

    • dig mumbai.time @dns.toys: aktuelle Uhrzeit einer Stadt abfragen
    • dig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: Zeitzonen-Umrechnung zwischen Städten
    • dig mumbai.weather @dns.toys: Wetter einer Stadt abfragen
    • dig 42km-mi.unit @dns.toys: Umrechnung zwischen über 70 Einheiten
    • dig 100USD-INR.fx @dns.toys: Währungsumrechnung auf Basis täglicher Wechselkurse
    • dig -4 ip @dns.toys: IPv4- oder IPv6-Adresse ermitteln
  • Rechen- und Entwicklerfunktionen

    • dig 10.0.0.0/24.cidr @dns.toys: erste und letzte nutzbare IP in einem Subnetz berechnen
    • dig 100dec-hex.base @dns.toys: Umrechnung zwischen Zahlensystemen hex, dec, oct und bin
    • dig 784783800.epoch @dns.toys: Unix-Timestamp in ein lesbares Datum umwandeln
    • dig 5.uuid @dns.toys: UUID v4 erzeugen
    • dig 5.10.nanoid @dns.toys: NanoIDs mit angegebener Länge und Anzahl erzeugen
  • Spielzeugfunktionen

    • dig pi @dns.toys: Ziffern von Pi ausgeben
    • dig 3d20/2.dice @dns.toys: Würfel mit angegebener Anzahl und Seitenzahl werfen
    • dig 2.coin @dns.toys: Münze werfen
    • dig 1-100.rand @dns.toys: Zufallszahl innerhalb eines Bereichs erzeugen
    • dig excuse @dns.toys: zufällige Entwickler-Ausrede ausgeben

Shell-Alias für kürzere Aufrufe

  • Mit dem Kurzbefehl dy lässt sich der Dienst noch knapper aufrufen, etwa dy mumbai.weather
    • Bash: alias dy="dig +short @dns.toys" zu ~/.bashrc hinzufügen
    • Fish: alias dy="dig +noall +answer +additional $argv @dns.toys" zu ~/.config/fish/config.fish hinzufügen
    • Zsh: alias dy="dig +short @dns.toys" zu ~/.zshrc hinzufügen
  • Wer viel Zeit im Terminal verbringt, kann Aufgaben wie Einheitenumrechnung oder Wetterabfragen schnell erledigen, ohne eine schwere Suchseite zu öffnen

1 Kommentare

 
GN⁺ 2024-01-08
Meinungen auf Hacker News
  • Das erinnert mich an einen kleinen Trick, den ich früher verwendet habe, als ich selbst ein Dynamic-DNS-Utility gebaut habe, um die IP-Adresse meines Rechners „zuverlässig“ zu ermitteln.
    Die OpenDNS-Resolver (resolver1.opendns.com usw.) lösen myip.opendns.com zur tatsächlichen IP-Adresse auf. Je nach Verbindungsstatus kommt ein A- oder AAAA-Record zurück, und da die IPs dieser Resolver normalerweise Anycast-IPs sind, wollte ich glauben, dass das etwas schneller ist, als einen zentralen HTTP-Dienst anzufragen, der jederzeit ausfallen kann.
    Natürlich kann auch OpenDNS jederzeit verschwinden, aber ich hielt dieses Risiko für besser als bei den vielen „Wie lautet meine IP-Adresse?“-HTTP-Diensten. Ich habe auch einmal gehört, dass DNS ursprünglich dafür gedacht war, ein breiteres Spektrum an Daten als nur Domainnamen zu behandeln; TXT-Records sind eine Spur davon. Diese Seite zeigt gut, welchen Nutzen man aus DNS ziehen kann.

    • Auch Google und Akamai bieten DNS-Dienste an.
      dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
      dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
    • Was ist wahrscheinlicher: dass OpenDNS ausfällt oder YouTube?
      curl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniq
      Was ist wahrscheinlicher: dass OpenDNS ausfällt oder Cloudflare? Die folgende Methode funktioniert mit jeder Cloudflare-IP-Adresse und braucht nicht einmal TLS.
      printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/p
      Die Liste der Cloudflare-IPs bekommt man mit curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Es gibt sehr viele Websites, die die Client-IP-Adresse auf der Webseite oder in HTTP-Headern ausgeben; es muss nicht unbedingt eine „What is my IP“-Seite sein.
      Auch Websites, die bestimmte Anfragen über Cloudflare blockieren, kommen infrage. Zum Beispiel kann man eine HTTP-Anfrage ohne User-Agent-Header an StackOverflow schicken.
      curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'
      Es ist ziemlich erstaunlich, dass „What is my IP“-Seiten so erfolgreich geworden sind, obwohl die eigene IP-Adresse auf Hunderttausenden Websites angezeigt wird. Zum Nutzen von DNS ist auch https://www.netmeister.org/blog/dns-rrs.html lesenswert.
    • Ich stimme zu, dass die meisten HTTP-Dienste zum Ermitteln der IP im Hinblick auf die Uptime nicht besonders vertrauenswürdig wirken.
      Allerdings gibt es auch https://icanhazip.com/, das von Cloudflare betrieben wird; das wirkt wahrscheinlich stabiler.
      https://ipv4.icanhazip.com/
      https://ipv6.icanhazip.com/
    • Eine sehr gute Idee. Sieht viel einfacher aus als das STUN-Protokoll.
  • Ich bin ein großer Fan von Julia Evans; sie hat auch ein paar nützliche Spielzeuge rund um DNS gebaut.
    https://jvns.ca/
    https://dns-lookup.jvns.ca/
    https://messwithdns.net/

  • Verwandte Beiträge:
    DNS Toys - https://news.ycombinator.com/item?id=31704789 - Juni 2022, 104 Kommentare
    DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - Juni 2022, 1 Kommentar

  • Das ist ein aktueller Vortrag des Autors dieses Projekts, mit einer unterhaltsamen Hintergrundgeschichte dazu, wie das Projekt entstanden ist.
    https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB

  • Merkwürdigerweise geben
    dig A0.0,0.0/0.0,90.0.aerial @dns.toys
    und
    dig A0.0,0.0/90.0,0.0.aerial @dns.toys
    beide TXT "aerial distance = 10007.06 KM" zurück.
    Der Äquatorumfang beträgt 40.075,017 km, der Polumfang 40.007,863 km. Selbst wenn man annimmt, die Erde sei eine imaginäre Kuhform, richtet das keinen großen Schaden an und man kann die unangenehmen Reihen vermeiden, mit denen man die kürzeste Entfernung zwischen zwei Punkten entlang der Oberfläche eines Ellipsoids berechnet.

    • Interessant. Diese Umfangswerte liegen tatsächlich viel näher beieinander, als ich gedacht hätte.
  • Etwas damit verwandt gibt es auch einen Dienst, der die Liste britischer Betreiber per DNS-Abfrage bereitstellt. Es ist dieselbe Idee, über einen DNS-Dienst Daten bereitzustellen, die kein DNS sind
    https://www.num.uk/
    Allerdings sieht es nach der Roadmap so aus, als würde der Dienst vielleicht nicht mehr gepflegt

    • Das Wort „Missbrauch“ sollte man besser nicht verwenden, sofern es nicht in einem Sinn wie „SOAP und XHR sind ein ‚Missbrauch‘ von HTTP“ gemeint ist
      Die IN-Klasse (internet) wirkt heute evolutionär wie ein überragender Mammutbaum, aber im Kambrium gab es auch die Klassen CH (chaos) und HS (hesiod). Es lohnt sich, Zweck und Ziele dieser Projekte noch einmal anzusehen
      Der heutige Missbrauch besteht eher darin, alles für Cloud-basierte Webdienste, also „happy eyeballs“, zu optimieren und alles andere zu opfern, etwa mit einem 10-Millisekunden-Fenster für Retransmits oder qname-Minimierung. Dinge wie Bufferbloat scheint man zum Beispiel kaum im Blick zu haben. Jenseits der A/AAAA-Auflösung gibt es eine ganz andere Welt
      Es ist auch nicht selten, auf den Fluren von Internet-Konferenzen zwei Leute mit Pocket Protectors beim Fechten zu sehen – oder zumindest dabei, wie sie sich gegenseitig mit Bleistiften pieksen. RFC steht für „Request For Comments“, und BCP (Best Current Practice) wird routinemäßig ignoriert
  • Gefällt mir. Ich wünschte nur, dig wäre auf allen Plattformen installiert
    Dass es unter Windows nicht verfügbar ist, nervt mich immer wieder, und wie ich gerade geprüft habe, ist es auch bei Debian nicht standardmäßig dabei. Natürlich lässt es sich leicht installieren. Auf OpenBSD und Mac OS X ist es vorhanden, das ist immerhin gut

    • Dog ist plattformübergreifend und hat ein paar nette Funktionen wie JSON-Ausgabe
      https://dns.lookup.dog/
    • Man muss nicht unbedingt dig verwenden. nslookup oder host funktionieren ebenfalls
      Unter Windows wird es sicher irgendein Tool für DNS-Abfragen geben
  • Kann mir jemand für den Dummen in diesem Thread erklären, als wäre ich fünf? Ich verstehe, dass es nur zum Spaß ist, aber ich kapiere es nicht. Ich weiß auch nicht, wie es funktioniert, und mir ist klar, dass das an meiner Unwissenheit liegt

    • Im Kern wird dabei ein nicht existierender Domainname über einen eigenen DNS-Server aufgelöst
      Zum Beispiel bedeutet dig 100USD-INR.fx @dns.toys: „Löse 100USD-INR.fx auf und verwende dabei dns.toys als DNS-Server.“ Dann wird ein TXT-Record mit der tatsächlichen Antwort zurückgegeben
      .fx ist eine nicht existierende Domain, daher gibt man sich auch nicht als jemand anders aus; und wenn man @dns.toys durch etwas wie @8.8.8.8 ersetzt, wird nichts aufgelöst
    • Stell dir eine Website wie news.ycombinator.com vor. Der Browser fragt bei einem speziellen Server nach der IP zu diesem Namen. Für diese Domain könnte dort ungefähr so etwas gespeichert sein
      A IP = ...1
      AAAA IP = ...2
      Dabei ist A der Record-Typ. Es gibt aber auch andere Record-Typen
      TXT gender = 'male'
      Es gibt ein paar Annahmen über DNS, die man meist stillschweigend für wahr hält. Leute verwenden DNS wie eine Vermittlungsstelle zu anderen Diensten, und die Werte in dieser Vermittlungsstelle sind im Allgemeinen statisch
      Hier passiert etwas völlig anderes, weil je nach Domain ein sich ändernder Wert zurückgegeben wird. Dafür braucht man einen selbst gebauten DNS-Server, aber das DNS-Protokoll selbst ist ziemlich simpel
      Schlau an diesem Hack ist, dass DNS eines der am weitesten verbreiteten und unterstützten Protokolle ist: Alle gängigen Programmbibliotheken unterstützen es, und in Betriebssystemen gibt es bereits viele Kommandozeilen-Tools dafür. Wenn man etwas als Dienst über DNS anbietet, kann man mit minimalen Abhängigkeiten aus Tools und Bibliotheken darauf zugreifen
      Außerdem wird DNS hier nicht als Vermittlungsstelle für normale Internetdienste genutzt, sondern direkt als Anwendungsdienst. Das stellt gängige Annahmen darüber auf den Kopf, wie man das DNS-System verwenden sollte. Beim Anbinden an bestehende Software braucht man keine komplexe Integration, und DNS-Anfragen können sogar intuitiver wirken als eine typische Web-API. Wahrscheinlich gibt es auch Vorteile in Bezug auf Zensurresistenz
    • Man kann sich einen DNS-Server wie einen speziellen Webserver vorstellen, der einen anderen Port und ein anderes Protokoll verwendet
      So wie man per HTTP Anfragen an einen Webserver stellt, interagiert man per DNS-Protokoll mit einem DNS-Server. Ähnlich wie man mit telnet HTTP- oder SMTP-Anfragen nachahmen kann, kommuniziert man nach einem bestimmten Regelwerk mit einer bestimmten Art von Server
      Dieser Server führt vor dem Ausgeben des Ergebnisses gewisse Berechnungen aus; das unterscheidet ihn von den meisten DNS-Records, von denen man normalerweise erwartet, dass sie statisch sind
    • Das DNS-Protokoll ist im Grunde einfach Text über UDP. Wenn dein System eine DNS-Anfrage erstellt, öffnet es einen Socket, schreibt google.com hinein und liest die Antwort
      Wenn der Server korrekt als DNS-Server eingerichtet ist, antwortet er mit passenden DNS-Records, wiederum als Text. Da google.com ein CNAME ist, der auf irgendeine für Load Balancing verwendete Subdomain zeigt, antwortet der Server etwa mit CNAME blabla.google.com und kann, wenn er möchte, blabla.google.com gleich mit auflösen, damit keine zusätzliche Anfrage nötig ist
      Das in irgendeinem RFC definierte DNS-Protokoll legt fest, dass Anfragen und Antworten auf bestimmte Weise erfolgen sollen. Eine Regel davon ist, dass ein Server für nicht existierende Top-Level-Domains, zum Beispiel die derzeit nicht existierende .time, mit nxdomain antworten muss. Technisch gibt es in der Praxis aber nichts, was einen Server daran hindert, irgendeinen beliebigen Wert wie die aktuelle Uhrzeit zurückzugeben
      Allgemein gesagt schützt Nutzer im Wesentlichen nur die Erwartung, dass DNS-Betreiber, ob öffentlich oder privat, keine falschen Daten zurückliefern. HTTPS mildert das bis zu einem gewissen Grad ab, aber DNS-Records selbst sind faktisch unbegrenzt fälschbar und es gibt keinen Weg, das rückgängig zu machen
  • Es überrascht mich, dass diese Funktionen nicht auch über irgendeine Subdomain von dns.toys angeboten werden. Dann ließen sie sich ohne speziellen Nameserver auflösen

    • Wenn man den Standard-Nameserver verwendet, kommt die ganze übliche DNS-Komplexität wie Caching ins Spiel
  • Heutzutage verwende ich dafür meistens das hier
    https://addr.tools/
    https://dnscheck.tools/
    https://myip.addr.tools/help