6 points par GN⁺ 2024-01-08 | 1 commentaires | Partager sur WhatsApp
  • dns.toys est un serveur DNS qui utilise les requêtes DNS comme une interface de commande, permettant d’exécuter de petits utilitaires dans le terminal avec seulement dig
  • Il permet de traiter directement des tâches pénibles à faire via une page de recherche, comme l’heure mondiale, la météo, la conversion de plus de 70 unités ou la conversion de devises basée sur les taux de change quotidiens
  • Il propose aussi des fonctions utiles aux développeurs, comme le calcul de plages CIDR, la génération d’UUID v4 et de NanoID, la conversion d’epoch Unix ou la conversion entre bases numériques
  • Les appels se font en indiquant @dns.toys, et dans Bash, Fish et Zsh, on peut ajouter un alias dy pour l’utiliser plus brièvement
  • Plus qu’un outil de production, c’est un service pensé pour le plaisir et la praticité de vérifier ou calculer rapidement des choses dans le terminal, bien adapté aux requêtes simples

Des utilitaires de terminal exécutés via des requêtes DNS

  • dns.toys fournit plusieurs fonctions via un serveur DNS, exécutées en envoyant avec dig des requêtes au format de domaine
  • Heure, météo et conversions

    • dig mumbai.time @dns.toys : consulter l’heure actuelle d’une ville
    • dig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys : conversion de fuseau horaire entre villes
    • dig mumbai.weather @dns.toys : consulter la météo d’une ville
    • dig 42km-mi.unit @dns.toys : conversion entre plus de 70 unités
    • dig 100USD-INR.fx @dns.toys : conversion de devises basée sur les taux de change quotidiens
    • dig -4 ip @dns.toys : vérifier une adresse IPv4 ou IPv6
  • Calculs et fonctions pour développeurs

    • dig 10.0.0.0/24.cidr @dns.toys : calculer la première et la dernière IP utilisables dans un sous-réseau
    • dig 100dec-hex.base @dns.toys : conversion de base entre hex, dec, oct et bin
    • dig 784783800.epoch @dns.toys : convertir un timestamp Unix en date lisible
    • dig 5.uuid @dns.toys : générer des UUID v4
    • dig 5.10.nanoid @dns.toys : générer des NanoID avec une longueur et un nombre spécifiés
  • Fonctions ludiques

    • dig pi @dns.toys : afficher les chiffres de Pi
    • dig 3d20/2.dice @dns.toys : lancer des dés avec un nombre et un nombre de faces spécifiés
    • dig 2.coin @dns.toys : lancer une pièce
    • dig 1-100.rand @dns.toys : générer un nombre aléatoire dans une plage
    • dig excuse @dns.toys : afficher une excuse de développeur aléatoire

Alias shell pour appeler plus court

  • En ajoutant la commande raccourcie dy, on peut l’appeler plus brièvement, par exemple dy mumbai.weather
    • Bash : ajouter alias dy="dig +short @dns.toys" à ~/.bashrc
    • Fish : ajouter alias dy="dig +noall +answer +additional $argv @dns.toys" à ~/.config/fish/config.fish
    • Zsh : ajouter alias dy="dig +short @dns.toys" à ~/.zshrc
  • Les utilisateurs qui passent beaucoup de temps dans le terminal peuvent traiter rapidement des tâches comme la conversion d’unités ou la consultation de la météo, sans ouvrir de lourdes pages de recherche

1 commentaires

 
GN⁺ 2024-01-08
Avis sur Hacker News
  • Cela me rappelle une petite astuce que j’utilisais autrefois, quand je développais mon propre utilitaire de DNS dynamique, pour calculer « de façon fiable » l’adresse IP de ma machine
    Les résolveurs OpenDNS (resolver1.opendns.com, etc.) résolvent myip.opendns.com vers votre véritable adresse IP. Selon l’état de la connexion, on obtient un enregistrement A ou AAAA, et comme les IP de ces résolveurs sont généralement des IP anycast, j’aimais croire que c’était un peu plus rapide que de faire une requête à un service HTTP central susceptible de tomber à tout moment
    Bien sûr, OpenDNS peut aussi disparaître à tout moment, mais je considère que ce risque est préférable à celui des innombrables services HTTP « quelle est mon adresse IP ? ». J’ai aussi entendu dire que DNS avait, à l’origine, vocation à gérer un éventail de données plus large que les seuls noms de domaine ; les enregistrements TXT en seraient une trace. Ce site montre bien l’utilité que l’on peut obtenir via DNS

    • Google et Akamai fournissent aussi des services DNS
      dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
      dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
    • Qu’est-ce qui a le plus de chances de tomber, OpenDNS ou YouTube ?
      curl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniq
      Qu’est-ce qui a le plus de chances de tomber, OpenDNS ou Cloudflare ? La méthode ci-dessous fonctionne avec n’importe quelle adresse IP Cloudflare et ne nécessite même pas TLS
      printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/p
      La liste des IP Cloudflare peut être obtenue avec curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Il existe énormément de sites web qui affichent l’adresse IP du client dans une page ou un en-tête HTTP, et il n’est pas nécessaire que ce soit un site « What is my IP »
      Les sites web qui bloquent certaines requêtes via Cloudflare sont aussi une option. Par exemple, il suffit d’envoyer une requête HTTP à StackOverflow sans en-tête User-Agent
      curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'
      Il est assez étonnant que les sites « What is my IP » aient eu du succès alors que votre adresse IP est affichée sur des centaines de milliers de sites. À propos de l’utilité de DNS, voir aussi https://www.netmeister.org/blog/dns-rrs.html
    • Je suis d’accord pour dire que la plupart des services HTTP permettant d’obtenir son IP ne semblent pas très fiables en termes de disponibilité
      Cela dit, il y a aussi https://icanhazip.com/, opéré par Cloudflare, qui semble probablement plus stable
      https://ipv4.icanhazip.com/
      https://ipv6.icanhazip.com/
    • Très bonne idée. Ça semble beaucoup plus simple que le protocole STUN
  • Je suis un grand fan de Julia Evans, qui a aussi créé quelques jouets utiles autour de DNS
    https://jvns.ca/
    https://dns-lookup.jvns.ca/
    https://messwithdns.net/

  • Articles connexes
    DNS Toys - https://news.ycombinator.com/item?id=31704789 - juin 2022, 104 commentaires
    DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - juin 2022, 1 commentaire

  • Voici une présentation récente de l’auteur de ce projet, avec une histoire en coulisses amusante sur la façon dont le projet a vu le jour
    https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB

  • Curieusement,
    dig A0.0,0.0/0.0,90.0.aerial @dns.toys
    et
    dig A0.0,0.0/90.0,0.0.aerial @dns.toys
    renvoient tous les deux TXT "aerial distance = 10007.06 KM"
    La circonférence équatoriale est de 40 075,017 km, et la circonférence polaire de 40 007,863 km. Même en supposant que la Terre soit une vache sphérique imaginaire, ce n’est pas bien grave, et cela permet d’éviter les séries pénibles nécessaires pour calculer la plus courte distance entre deux points le long de la surface d’un ellipsoïde

    • Intéressant. Ces valeurs de circonférence sont en réalité beaucoup plus proches que je ne le pensais
  • Dans un registre un peu lié, il existe aussi un service qui fournit la liste des opérateurs britanniques via des requêtes DNS. C’est la même idée : fournir des données qui ne sont pas du DNS au moyen d’un service DNS
    https://www.num.uk/
    Cela dit, à voir la feuille de route, il se peut que le service ne soit plus maintenu

    • Il vaut mieux éviter le mot « abus », sauf si c’est au sens où « SOAP et XHR sont un “abus” de HTTP »
      La classe IN (internet) ressemble aujourd’hui, par évolution, à un séquoia dominant, mais à l’époque cambrienne il y avait aussi les classes CH (chaos) et HS (hesiod). Les objectifs et finalités de ces projets méritent d’être réexaminés
      L’abus, aujourd’hui, ressemble plutôt au fait de tout sacrifier pour optimiser uniquement les services web cloud, c’est-à-dire les « happy eyeballs », avec des choses comme une fenêtre de 10 millisecondes pour la retransmission ou la minimisation du qname. Par exemple, on ne semble pas non plus très conscient du bufferbloat. Il existe tout un autre monde en dehors de la résolution A/AAAA
      Dans les couloirs des réunions Internet, il n’est pas rare non plus de voir deux personnes avec des protège-poches se livrer à un duel à l’épée, ou au moins se piquer mutuellement avec des crayons. RFC signifie « Request For Comments », et les BCP (Best Current Practice) sont couramment ignorées
  • J’aime bien. J’aimerais juste que dig soit installé sur toutes les plateformes
    C’est toujours agaçant de ne pas l’avoir sous Windows, et après vérification il n’est pas non plus inclus par défaut dans Debian. Bien sûr, il s’installe facilement. Il est présent sur OpenBSD et Mac OS X, donc c’est déjà ça

    • Dog est multiplateforme et a aussi des fonctionnalités sympas comme la sortie JSON
      https://dns.lookup.dog/
    • Il n’est pas obligatoire d’utiliser dig. nslookup ou host fonctionnent aussi
      Windows doit bien avoir un outil quelconque de requête DNS
  • Quelqu’un peut-il expliquer ça comme à un enfant de cinq ans pour l’idiot de ce fil ? Je vois bien que c’est pour s’amuser, mais je ne comprends pas. Je ne sais pas non plus comment ça fonctionne, et je sais que c’est dû à mon ignorance

    • En substance, il s’agit de résoudre des domaines inexistants via un serveur DNS personnalisé
      Par exemple, dig 100USD-INR.fx @dns.toys signifie « résoudre 100USD-INR.fx en utilisant dns.toys comme serveur DNS ». Il renvoie alors un enregistrement TXT contenant la vraie réponse
      Comme .fx est un domaine inexistant, cela n’usurpe personne, et si l’on remplace @dns.toys par quelque chose comme @8.8.8.8, rien ne sera résolu
    • Il suffit de penser à un site comme news.ycombinator.com. Le navigateur interroge un serveur spécial pour obtenir l’IP associée à ce nom. Ce domaine peut contenir, en gros, quelque chose comme ceci
      A IP = ...1
      AAAA IP = ...2
      Ici, A est le type d’enregistrement. Mais il existe aussi d’autres types d’enregistrements
      TXT gender = 'male'
      Il y a plusieurs hypothèses que l’on tient généralement pour implicitement vraies à propos du DNS. Les gens utilisent le DNS comme un standard téléphonique vers d’autres services, et les valeurs à l’intérieur de ce standard sont globalement statiques
      Ici, on fait quelque chose de complètement différent, puisque l’on renvoie une valeur qui change selon le domaine. Pour cela, il faut un serveur DNS fait maison, mais le protocole DNS lui-même est assez simple
      Ce qui rend ce hack malin, c’est que DNS est l’un des protocoles les plus répandus et les mieux pris en charge : toutes les bibliothèques de programmation grand public le supportent, et il existe déjà beaucoup d’outils en ligne de commande intégrés aux systèmes d’exploitation. En exposant un service au-dessus de DNS, on peut y accéder depuis des outils et bibliothèques avec un minimum de dépendances
      De plus, cela fait utiliser DNS directement comme service applicatif, plutôt que comme standard des services Internet ordinaires, et renverse les hypothèses habituelles sur la manière dont le système DNS doit être utilisé. L’intégration à des logiciels existants ne nécessite pas non plus d’intégration complexe, et les requêtes DNS peuvent être vues comme plus intuitives qu’une API web classique. Il y a probablement aussi des avantages en matière de résistance à la censure
    • On peut considérer un serveur DNS comme un serveur web spécial qui utilise un autre port et un autre protocole
      De la même façon que l’on envoie des requêtes à un serveur web en HTTP, on interagit avec un serveur DNS via le protocole DNS. C’est un peu comme simuler des requêtes HTTP ou SMTP avec telnet : on communique avec un type donné de serveur selon un ensemble donné de règles
      Ce serveur effectue un certain calcul avant de produire le résultat, ce qui le distingue de la plupart des enregistrements DNS, que l’on s’attend normalement à voir statiques
    • Le protocole DNS est simplement du texte au-dessus d’UDP. Lorsqu’il crée une requête DNS, le système ouvre un socket, y écrit google.com, puis lit la réponse
      Si le serveur est correctement configuré comme serveur DNS, il répond avec l’enregistrement DNS approprié, à nouveau sous forme de texte. Comme google.com est un CNAME pointant vers un sous-domaine utilisé pour la répartition de charge, le serveur répondra quelque chose comme CNAME blabla.google.com et pourra, s’il le souhaite, résoudre aussi blabla.google.com pour éviter une requête supplémentaire
      Le protocole DNS défini dans un RFC impose que les requêtes et réponses suivent certaines règles. L’une d’elles est que, pour un domaine de premier niveau inexistant, par exemple .time qui n’existe pas actuellement, le serveur doit répondre nxdomain. Mais en pratique, rien ne l’empêche techniquement de répondre n’importe quelle valeur, comme l’heure actuelle
      De manière générale, publique ou privée, la seule chose qui protège les utilisateurs est l’attente selon laquelle l’opérateur DNS ne renverra pas de données fantaisistes. HTTPS atténue cela dans une certaine mesure, mais les enregistrements DNS eux-mêmes sont en réalité falsifiables à l’infini, sans véritable possibilité de retour en arrière
  • Je suis surpris que ces fonctionnalités ne soient pas proposées sous un sous-domaine quelconque de dns.toys. Comme ça, elles seraient résolues sans avoir à utiliser un serveur de noms spécial

    • Si l’on utilise les serveurs de noms par défaut, toute la complexité habituelle du DNS, comme la mise en cache, entre en jeu
  • Ces temps-ci, j’utilise surtout ceci
    https://addr.tools/
    https://dnscheck.tools/
    https://myip.addr.tools/help