Lancement de DNS Toys (2022)
(dns.toys)- 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 aliasdypour 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
digdes requêtes au format de domaine -
Heure, météo et conversions
dig mumbai.time @dns.toys: consulter l’heure actuelle d’une villedig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: conversion de fuseau horaire entre villesdig mumbai.weather @dns.toys: consulter la météo d’une villedig 42km-mi.unit @dns.toys: conversion entre plus de 70 unitésdig 100USD-INR.fx @dns.toys: conversion de devises basée sur les taux de change quotidiensdig -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éseaudig 100dec-hex.base @dns.toys: conversion de base entre hex, dec, oct et bindig 784783800.epoch @dns.toys: convertir un timestamp Unix en date lisibledig 5.uuid @dns.toys: générer des UUID v4dig 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 Pidig 3d20/2.dice @dns.toys: lancer des dés avec un nombre et un nombre de faces spécifiésdig 2.coin @dns.toys: lancer une piècedig 1-100.rand @dns.toys: générer un nombre aléatoire dans une plagedig 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 exempledy 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
- Bash : ajouter
- 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
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ésolventmyip.opendns.comvers 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 momentBien 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
dig @ns1-1.akamaitech.net ANY whoami.akamai.net +shortdig @ns1.google.com TXT o-o.myaddr.l.google.com +shortcurl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniqQu’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=/pLa 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
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/
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.toyset
dig A0.0,0.0/90.0,0.0.aerial @dns.toysrenvoient 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
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
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
digsoit installé sur toutes les plateformesC’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
https://dns.lookup.dog/
dig.nslookupouhostfonctionnent aussiWindows 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
Par exemple,
dig 100USD-INR.fx @dns.toyssignifie « résoudre100USD-INR.fxen utilisantdns.toyscomme serveur DNS ». Il renvoie alors un enregistrement TXT contenant la vraie réponseComme
.fxest un domaine inexistant, cela n’usurpe personne, et si l’on remplace@dns.toyspar quelque chose comme@8.8.8.8, rien ne sera résolunews.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 ceciA IP = ...1AAAA IP = ...2Ici,
Aest le type d’enregistrement. Mais il existe aussi d’autres types d’enregistrementsTXT 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
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èglesCe 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
google.com, puis lit la réponseSi le serveur est correctement configuré comme serveur DNS, il répond avec l’enregistrement DNS approprié, à nouveau sous forme de texte. Comme
google.comest un CNAME pointant vers un sous-domaine utilisé pour la répartition de charge, le serveur répondra quelque chose commeCNAME blabla.google.comet pourra, s’il le souhaite, résoudre aussiblabla.google.compour éviter une requête supplémentaireLe 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
.timequi n’existe pas actuellement, le serveur doit répondrenxdomain. Mais en pratique, rien ne l’empêche techniquement de répondre n’importe quelle valeur, comme l’heure actuelleDe 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écialCes temps-ci, j’utilise surtout ceci
https://addr.tools/
https://dnscheck.tools/
https://myip.addr.tools/help