6 pontos por GN⁺ 2024-01-08 | 1 comentários | Compartilhar no WhatsApp
  • dns.toys é um servidor DNS que usa consultas DNS como uma interface de comandos, permitindo executar pequenos utilitários no terminal usando apenas dig
  • Permite resolver rapidamente tarefas que seriam trabalhosas de fazer abrindo uma página de busca, como horário mundial, clima, conversão de mais de 70 unidades e conversão de moedas baseada na taxa de câmbio diária
  • Também oferece recursos úteis para desenvolvedores, como cálculo de intervalos CIDR, geração de UUID v4 e NanoID, conversão de Unix epoch e conversão entre bases numéricas
  • As chamadas são feitas especificando @dns.toys; no Bash, Fish e Zsh, é possível adicionar o alias dy para usar comandos ainda mais curtos
  • Mais do que uma ferramenta de trabalho, é um serviço voltado à conveniência e à diversão de consultar e calcular rapidamente dentro do terminal, adequado para consultas simples

Utilitários de terminal executados por consultas DNS

  • dns.toys oferece várias funções como um servidor DNS, executadas enviando consultas em formato de domínio com dig
  • Hora, clima e conversões

    • dig mumbai.time @dns.toys: consulta a hora atual de uma cidade
    • dig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: conversão de fuso horário entre cidades
    • dig mumbai.weather @dns.toys: consulta o clima de uma cidade
    • dig 42km-mi.unit @dns.toys: conversão entre mais de 70 unidades
    • dig 100USD-INR.fx @dns.toys: conversão de moedas baseada na taxa de câmbio diária
    • dig -4 ip @dns.toys: verifica o endereço IPv4 ou IPv6
  • Cálculos e recursos para desenvolvedores

    • dig 10.0.0.0/24.cidr @dns.toys: calcula o primeiro e o último IP utilizável em uma sub-rede
    • dig 100dec-hex.base @dns.toys: conversão entre bases numéricas hex, dec, oct e bin
    • dig 784783800.epoch @dns.toys: converte um timestamp Unix para uma data legível
    • dig 5.uuid @dns.toys: gera UUIDs v4
    • dig 5.10.nanoid @dns.toys: gera NanoIDs com tamanho e quantidade especificados
  • Recursos de brincadeira

    • dig pi @dns.toys: exibe dígitos de Pi
    • dig 3d20/2.dice @dns.toys: rola dados com quantidade e número de faces especificados
    • dig 2.coin @dns.toys: joga moedas
    • dig 1-100.rand @dns.toys: gera um número aleatório dentro de um intervalo
    • dig excuse @dns.toys: exibe uma desculpa aleatória de desenvolvedor

Alias de shell para chamadas curtas

  • Ao adicionar o comando abreviado dy, é possível chamar de forma mais curta, como dy mumbai.weather
    • Bash: adicionar alias dy="dig +short @dns.toys" ao ~/.bashrc
    • Fish: adicionar alias dy="dig +noall +answer +additional $argv @dns.toys" ao ~/.config/fish/config.fish
    • Zsh: adicionar alias dy="dig +short @dns.toys" ao ~/.zshrc
  • Usuários que passam muito tempo no terminal podem resolver rapidamente tarefas como conversão de unidades ou consulta do clima sem abrir páginas de busca pesadas

1 comentários

 
GN⁺ 2024-01-08
Opiniões no Hacker News
  • Lembrei de um pequeno truque que usei antigamente, quando criei por conta própria um utilitário de DNS dinâmico e queria calcular “de forma confiável” o endereço IP da minha máquina
    Os resolvedores da OpenDNS (resolver1.opendns.com etc.) resolvem myip.opendns.com para o endereço IP real. Dependendo da conexão, sai um registro A ou AAAA, e como os IPs desses resolvedores geralmente são IPs anycast, eu queria acreditar que seria um pouco mais rápido do que fazer uma requisição para algum serviço HTTP central que pode cair a qualquer momento
    Claro que a OpenDNS também pode desaparecer a qualquer momento, mas acho esse risco melhor do que depender dos inúmeros serviços HTTP de “qual é meu endereço IP?”. Já ouvi dizer também que o DNS foi originalmente pensado para lidar com uma gama de dados mais ampla do que apenas nomes de domínio, e coisas como registros TXT são vestígios disso. Este site mostra bem a utilidade que dá para obter via DNS

    • Google e Akamai também oferecem serviços DNS
      dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
      dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
    • O que tem mais chance de sair do ar, OpenDNS ou YouTube?
      curl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniq
      O que tem mais chance de sair do ar, OpenDNS ou Cloudflare? O método abaixo funciona em qualquer endereço IP da Cloudflare e nem precisa de TLS
      printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/p
      A lista de IPs da Cloudflare pode ser obtida com curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Há muitos sites que exibem o endereço IP do cliente em uma página web ou em cabeçalhos HTTP, e não precisam ser necessariamente sites de “What is my IP”
      Sites que bloqueiam determinadas requisições via Cloudflare também são uma opção. Por exemplo, basta enviar uma requisição HTTP ao StackOverflow sem o cabeçalho User-Agent
      curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'
      É bem surpreendente que sites de “What is my IP” tenham feito sucesso mesmo com o próprio endereço IP aparecendo em centenas de milhares de sites. Sobre a utilidade do DNS, vale também consultar https://www.netmeister.org/blog/dns-rrs.html
    • Concordo que a maioria dos serviços HTTP para obter IP não parece muito confiável em termos de tempo de atividade
      Mas também existe o https://icanhazip.com/, operado pela Cloudflare, e esse parece ter uma chance maior de ser estável
      https://ipv4.icanhazip.com/
      https://ipv6.icanhazip.com/
    • Ideia muito boa. Parece bem mais simples que o protocolo STUN
  • Sou um grande fã da Julia Evans, e ela também criou alguns brinquedos úteis relacionados a DNS
    https://jvns.ca/
    https://dns-lookup.jvns.ca/
    https://messwithdns.net/

  • Alguns posts relacionados
    DNS Toys - https://news.ycombinator.com/item?id=31704789 - junho de 2022, 104 comentários
    DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - junho de 2022, 1 comentário

  • Esta é uma apresentação recente do autor deste projeto, com uma história de bastidores interessante sobre como o projeto surgiu
    https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB

  • Estranhamente,
    dig A0.0,0.0/0.0,90.0.aerial @dns.toys
    e
    dig A0.0,0.0/90.0,0.0.aerial @dns.toys
    ambos retornam TXT "aerial distance = 10007.06 KM"
    A circunferência equatorial é de 40.075,017 km, e a circunferência polar é de 40.007,863 km. Mesmo supondo que a Terra tenha a forma de uma vaca imaginária, não há grande prejuízo, e ainda dá para evitar as séries complicadas para calcular a menor distância entre dois pontos ao longo da superfície de um elipsoide

    • Interessante. Esses valores de circunferência são, na prática, muito mais próximos do que eu imaginava
  • Um pouco relacionado: também existe um serviço que oferece a lista de empresas do Reino Unido por meio de consultas DNS. É a mesma ideia de fornecer dados que não são DNS como um serviço DNS
    https://www.num.uk/
    Mas, olhando o roadmap, parece que talvez eles não mantenham mais o serviço

    • É melhor evitar a palavra “abuso”, a menos que seja no sentido de “SOAP e XHR são um ‘abuso’ do HTTP”
      A classe IN (internet) hoje parece uma sequoia que se destacou por evolução, mas no Cambriano também existiam as classes CH (chaos) e HS (hesiod). Vale revisitar o propósito e os objetivos desses projetos
      O abuso de hoje, na verdade, parece estar mais em otimizar só para serviços web baseados em nuvem, isto é, “happy eyeballs”, sacrificando todo o resto, como uma janela de 10 milissegundos para retransmissão ou minimização de qname. Por exemplo, parece que quase não se leva em conta coisas como bufferbloat. Há um mundo completamente diferente fora da resolução A/AAAA
      Também não é raro ver, nos corredores de conferências de internet, duas pessoas com protetores de bolso fazendo duelo de espadas — ou pelo menos se cutucando com lápis. RFC significa “Request For Comments”, e BCP (Best Current Practice) é rotineiramente ignorado
  • Gostei. Só queria que o dig viesse instalado em todas as plataformas
    Sempre me irrita não poder usá-lo no Windows e, pelo que verifiquei, ele também não vem por padrão no Debian. Claro, é fácil de instalar. Ele existe no OpenBSD e no Mac OS X, o que é bom

    • O Dog é multiplataforma e tem recursos legais, como saída em JSON
      https://dns.lookup.dog/
    • Não é obrigatório usar dig. nslookup ou host também funcionam
      No Windows deve haver alguma ferramenta de consulta DNS
  • Alguém pode explicar como se eu tivesse cinco anos, para o idiota deste tópico? Sei que é por diversão, mas não entendi. Também não sei como funciona, e sei que isso é por ignorância minha

    • Essencialmente, ele resolve domínios inexistentes por meio de um servidor DNS customizado
      Por exemplo, dig 100USD-INR.fx @dns.toys significa “resolva 100USD-INR.fx usando dns.toys como servidor DNS”. Então ele retorna um registro TXT com a resposta real
      Como .fx é um domínio inexistente, ele não está se passando por ninguém; e, se você trocar @dns.toys por algo como @8.8.8.8, nada será resolvido
    • Pense em um site como news.ycombinator.com. O navegador consulta um servidor especial para obter o IP desse nome. Esse domínio pode ter algo armazenado mais ou menos assim
      A IP = ...1
      AAAA IP = ...2
      Aqui, A é o tipo de registro. Mas existem outros tipos de registro
      TXT gender = 'male'
      Há algumas suposições que as pessoas normalmente tratam como implicitamente verdadeiras sobre DNS. Elas usam DNS como uma central de comutação para outros serviços, e os valores dentro dessa central geralmente são estáticos
      Aqui ele faz algo completamente diferente, porque retorna valores que mudam conforme o domínio. Para fazer isso, é preciso um servidor DNS próprio, mas o protocolo DNS em si é bastante simples
      O motivo de esse hack ser inteligente é que DNS é um dos protocolos mais usados e suportados: todas as bibliotecas de programação principais dão suporte a ele, e há muitas ferramentas de linha de comando já presentes no sistema operacional. Se você oferecer algo como serviço sobre DNS, ele pode ser acessado por ferramentas e bibliotecas com dependências mínimas
      Além disso, ele faz o DNS ser usado diretamente como um serviço de aplicação, e não como uma central de comutação para serviços comuns da internet, invertendo as suposições usuais sobre como o sistema DNS deveria ser usado. Ao conectar isso a softwares existentes, também não é necessária uma integração complexa, e requisições DNS podem ser vistas como mais intuitivas do que uma API web comum. Também pode haver vantagens em termos de resistência à censura
    • Pense em um servidor DNS como um servidor web especial que usa outra porta e outro protocolo
      Assim como você faz requisições a um servidor web via HTTP, você interage com um servidor DNS usando o protocolo DNS. É parecido com simular requisições HTTP ou SMTP com telnet: você se comunica com um tipo específico de servidor seguindo um conjunto específico de regras
      Esse servidor faz um certo cálculo antes de produzir o resultado, e é aí que ele difere da maioria dos registros DNS, que normalmente se espera que sejam estáticos
    • O protocolo DNS é simplesmente texto sobre UDP. Ao criar uma requisição DNS, o sistema abre um socket, escreve google.com nele e lê a resposta
      Se o servidor estiver configurado corretamente como servidor DNS, ele responde, também em texto, com os registros DNS adequados. Como google.com é um CNAME que aponta para algum subdomínio usado em balanceamento de carga, o servidor responde algo como CNAME blabla.google.com e, se quiser, também pode resolver blabla.google.com junto para poupar o trabalho de fazer uma requisição extra
      O protocolo DNS definido em algum RFC determina que requisições e respostas sigam certas regras. Uma delas é que, para um domínio de topo inexistente, por exemplo .time, que atualmente não existe, o servidor deve responder nxdomain. Mas, na prática, não há nenhum mecanismo técnico que impeça o servidor de responder qualquer valor, como a hora atual
      Em geral, a única coisa que protege o usuário é a expectativa de que o operador de DNS, público ou privado, não retornará dados falsos. HTTPS mitiga isso até certo ponto, mas os próprios registros DNS são, na prática, infinitamente falsificáveis, sem uma forma de reverter isso
  • É surpreendente que esses recursos não sejam oferecidos por algum subdomínio de dns.toys. Assim eles poderiam ser resolvidos sem usar um servidor de nomes especial

    • Se você usar o servidor de nomes padrão, entram todas as complexidades do DNS comuns, como cache
  • Hoje em dia, uso principalmente isto
    https://addr.tools/
    https://dnscheck.tools/
    https://myip.addr.tools/help