6 पॉइंट द्वारा GN⁺ 2024-01-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • dns.toys एक DNS सर्वर है जो DNS queries को कमांड इंटरफ़ेस की तरह इस्तेमाल करता है, जिससे टर्मिनल में सिर्फ dig के जरिए छोटे utilities चलाए जा सकते हैं
  • यह world time, weather, 70 से अधिक unit conversions, और daily exchange rate आधारित currency conversion जैसे काम तुरंत कर सकता है, जिनके लिए वरना search page खोलना झंझट भरा होता है
  • यह developers के लिए CIDR range calculation, UUID v4·NanoID generation, Unix epoch conversion, और base conversion जैसी सुविधाएँ भी देता है
  • कॉल करने का तरीका @dns.toys निर्दिष्ट करना है, और Bash·Fish·Zsh में dy alias जोड़कर इसे और छोटा किया जा सकता है
  • यह किसी hardcore production tool से अधिक टर्मिनल के भीतर जल्दी जाँच और calculation की सुविधा व मज़े पर केंद्रित सेवा है, इसलिए simple lookup tasks के लिए अच्छी तरह फिट बैठती है

DNS queries से चलने वाली टर्मिनल utility

  • dns.toys कई functions को DNS server के रूप में उपलब्ध कराता है, और domain format वाली queries को dig से भेजकर चलाया जाता है
  • समय·मौसम·रूपांतरण

    • dig mumbai.time @dns.toys: शहर का मौजूदा समय देखें
    • dig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: शहरों के बीच time zone conversion
    • dig mumbai.weather @dns.toys: शहर का मौसम देखें
    • dig 42km-mi.unit @dns.toys: 70 से अधिक units के बीच conversion
    • dig 100USD-INR.fx @dns.toys: daily exchange rate आधारित currency conversion
    • dig -4 ip @dns.toys: IPv4 या IPv6 address देखें
  • calculation·developer features

    • dig 10.0.0.0/24.cidr @dns.toys: subnet में पहला और आखिरी usable IP calculate करें
    • dig 100dec-hex.base @dns.toys: hex, dec, oct, bin के बीच base conversion
    • dig 784783800.epoch @dns.toys: Unix timestamp को readable date में बदलें
    • dig 5.uuid @dns.toys: UUID v4 generate करें
    • dig 5.10.nanoid @dns.toys: तय लंबाई और संख्या के साथ NanoID generate करें
  • मज़ेदार features

    • dig pi @dns.toys: Pi के अंक दिखाएँ
    • dig 3d20/2.dice @dns.toys: तय संख्या और sides के साथ dice roll करें
    • dig 2.coin @dns.toys: coin toss
    • dig 1-100.rand @dns.toys: range के भीतर random number generate करें
    • dig excuse @dns.toys: random developer excuse दिखाएँ

छोटे तरीके से कॉल करने के लिए shell alias

  • dy short command जोड़ने पर dy mumbai.weather की तरह इसे और संक्षेप में चलाया जा सकता है
    • Bash: alias dy="dig +short @dns.toys" को ~/.bashrc में जोड़ें
    • Fish: alias dy="dig +noall +answer +additional $argv @dns.toys" को ~/.config/fish/config.fish में जोड़ें
    • Zsh: alias dy="dig +short @dns.toys" को ~/.zshrc में जोड़ें
  • जो उपयोगकर्ता टर्मिनल में बहुत समय बिताते हैं, वे भारी search pages खोले बिना unit conversion या मौसम जाँच जैसे काम तेज़ी से कर सकते हैं

1 टिप्पणियां

 
GN⁺ 2024-01-08
Hacker News की राय
  • पहले जब मैं अपना dynamic DNS utility खुद बना रहा था, तो अपनी मशीन का IP address “भरोसेमंद तरीके से” निकालने के लिए इस्तेमाल की गई एक छोटी-सी trick याद आ गई
    OpenDNS resolver (resolver1.opendns.com आदि) myip.opendns.com को असली IP address में resolve कर देते हैं। कनेक्शन की स्थिति के हिसाब से A या AAAA record मिलता है, और इन resolvers के IP आम तौर पर anycast IP होते हैं, इसलिए मैं मानना चाहता था कि यह किसी ऐसे central HTTP service को request करने से थोड़ा तेज़ होगा जो कभी भी डाउन हो सकता है
    बेशक OpenDNS भी कभी भी गायब हो सकता है, लेकिन मुझे लगा कि वह जोखिम उन ढेरों “मेरा IP address क्या है?” HTTP services से बेहतर है। मैंने यह भी सुना है कि DNS को मूल रूप से domain names से ज़्यादा व्यापक तरह के data को संभालने के लिए सोचा गया था; TXT records जैसी चीज़ें उसी की निशानी हैं। यह site DNS से मिलने वाली उपयोगिता को अच्छी तरह दिखाती है

    • Google और Akamai भी DNS services देते हैं
      dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
      dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
    • OpenDNS और YouTube में किसके डाउन होने की संभावना ज़्यादा है?
      curl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniq
      OpenDNS और Cloudflare में किसके डाउन होने की संभावना ज़्यादा है? नीचे वाला तरीका किसी भी Cloudflare IP address पर काम करता है और TLS की भी ज़रूरत नहीं है
      printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/p
      Cloudflare IP list curl -4si0A "" https://api.cloudflare.com/client/v4/ips से ली जा सकती है। बहुत सारी websites client IP address को webpage या HTTP header में दिखाती हैं, और उनका “What is my IP” site होना ज़रूरी नहीं है
      Cloudflare से कुछ खास requests को block करने वाली website भी एक विकल्प है। उदाहरण के लिए, StackOverflow को User-Agent header के बिना HTTP request भेज दें
      curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'
      आपका IP address लाखों websites पर दिख जाता है, फिर भी “What is my IP” sites सफल रहीं—यह काफी हैरान करने वाला है। DNS की उपयोगिता के बारे में https://www.netmeister.org/blog/dns-rrs.html भी देखने लायक है
    • मैं इस बात से सहमत हूं कि IP पाने वाली ज़्यादातर HTTP services uptime के लिहाज़ से बहुत भरोसेमंद नहीं लगतीं
      हालांकि Cloudflare द्वारा चलाया जाने वाला https://icanhazip.com/ भी है, और यह ज़्यादा stable होने की संभावना रखता दिखता है
      https://ipv4.icanhazip.com/
      https://ipv6.icanhazip.com/
    • बहुत बढ़िया idea है। यह STUN protocol से काफी सरल लगता है
  • मैं Julia Evans का बड़ा fan हूं, और उन्होंने DNS से जुड़े कुछ उपयोगी toys भी बनाए हैं
    https://jvns.ca/
    https://dns-lookup.jvns.ca/
    https://messwithdns.net/

  • संबंधित posts
    DNS Toys - https://news.ycombinator.com/item?id=31704789 - जून 2022, 104 comments
    DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - जून 2022, 1 comment

  • इस project के author ने हाल ही में यह presentation दी थी, जिसमें project कैसे बना, इस पर मज़ेदार background story आती है
    https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB

  • अजीब बात है कि
    dig A0.0,0.0/0.0,90.0.aerial @dns.toys
    और
    dig A0.0,0.0/90.0,0.0.aerial @dns.toys
    दोनों TXT "aerial distance = 10007.06 KM" return करते हैं
    भूमध्य रेखा की परिधि 40,075.017km है और ध्रुवीय परिधि 40,007.863km है। पृथ्वी को काल्पनिक गाय के आकार का मान लेने पर भी कोई बड़ा नुकसान नहीं है, और इससे ellipsoid surface पर दो points के बीच shortest distance निकालने वाली मुश्किल series से बचा जा सकता है

    • दिलचस्प है। वे परिधि values असल में मेरी सोच से कहीं ज़्यादा करीब हैं
  • थोड़ा संबंधित तौर पर, UK ऑपरेटरों की सूची DNS lookup के रूप में उपलब्ध कराने वाली एक सेवा भी है। यह भी वही idea है कि DNS सेवा के ज़रिए non-DNS data दिया जाए
    https://www.num.uk/
    हालांकि roadmap देखें तो लगता है कि शायद अब service maintain नहीं की जा रही

    • “abuse” शब्द का इस्तेमाल न करना बेहतर है, जब तक उसका मतलब “SOAP और XHR, HTTP का ‘abuse’ हैं” जैसा न हो
      IN(internet) class आज evolution में खड़े ऊँचे देवदार जैसी लगती है, लेकिन Cambrian दौर में CH(chaos) और HS(hesiod) classes भी थीं। उन projects के उद्देश्य और goals को फिर से देखना worthwhile है
      बल्कि आज का abuse ज़्यादा इस तरह का है कि 10-millisecond retransmission window या qname minimization जैसी चीज़ों में cloud-based web services, यानी “happy eyeballs”, के लिए ही optimize किया जाता है और बाकी सबकी बलि दे दी जाती है। उदाहरण के लिए bufferbloat जैसी चीज़ पर भी ज़्यादा ध्यान नहीं दिया जाता लगता है। A/AAAA resolution के बाहर भी एक बिल्कुल अलग दुनिया है
      Internet conferences के corridors में pocket protector लगाए दो लोगों को तलवारबाज़ी करते, या कम से कम pencils से एक-दूसरे को चुभाते देखना भी rare नहीं है। RFC का मतलब “Request For Comments” है, और BCP(Best Current Practice) को रोज़मर्रा में ignore किया जाता है
  • पसंद आया। बस काश dig हर platform पर installed होता
    Windows पर इस्तेमाल नहीं कर सकते, यह हमेशा irritate करता है, और check किया तो Debian में भी default से शामिल नहीं है। बेशक इसे आसानी से install किया जा सकता है। OpenBSD और Mac OS X में है, तो वह अच्छी बात है

    • Dog cross-platform है और JSON output जैसी अच्छी features भी हैं
      https://dns.lookup.dog/
    • ज़रूरी नहीं कि dig ही इस्तेमाल करें। nslookup या host भी काम करते हैं
      Windows में भी कोई न कोई DNS lookup tool तो होगा ही
  • क्या इस thread के बेवकूफ़ के लिए इसे पाँच साल के बच्चे को समझाने जैसा समझा सकते हो? पता है कि यह मज़े के लिए है, लेकिन समझ नहीं आ रहा। यह कैसे काम करता है, यह भी नहीं जानता, और जानता हूँ कि यह मेरी ignorance की वजह से है

    • मूल रूप से यह custom DNS server के ज़रिए ऐसे domains को resolve करना है जो exist नहीं करते
      उदाहरण के लिए dig 100USD-INR.fx @dns.toys का मतलब है “dns.toys को DNS server के रूप में इस्तेमाल करके 100USD-INR.fx resolve करो।” तब यह असली answer वाला TXT record लौटाता है
      .fx कोई existing domain नहीं है, इसलिए यह किसी की impersonation भी नहीं है, और अगर @dns.toys को @8.8.8.8 जैसी किसी चीज़ से बदल दें तो कुछ भी resolve नहीं होगा
    • news.ycombinator.com जैसी site के बारे में सोचें। Browser उस नाम से किसी special server पर IP lookup करता है। उस domain में मोटे तौर पर कुछ ऐसा stored हो सकता है
      A IP = ...1
      AAAA IP = ...2
      यहाँ A record type है। लेकिन दूसरे record types भी होते हैं
      TXT gender = 'male'
      DNS के बारे में कुछ assumptions हैं जिन्हें आम तौर पर implicitly true माना जाता है। लोग DNS को दूसरी services तक जाने वाले switchboard की तरह इस्तेमाल करते हैं, और switchboard के अंदर की values आम तौर पर static होती हैं
      यहाँ domain के हिसाब से बदलने वाली value return की जाती है, इसलिए यह पूरी तरह अलग काम कर रहा है। ऐसा करने के लिए अपना बनाया हुआ DNS server चाहिए, लेकिन DNS protocol खुद काफी simple है
      यह hack इसलिए smart है क्योंकि DNS सबसे widely used और supported protocols में से एक है, इसलिए लगभग सभी mainstream programming libraries इसे support करती हैं और operating systems में पहले से मौजूद command-line tools भी बहुत हैं। DNS के ऊपर service के रूप में provide करने से minimum dependencies के साथ tools और libraries से access किया जा सकता है
      साथ ही यह DNS को सामान्य internet services के switchboard के बजाय सीधे application service की तरह इस्तेमाल करवाता है, और DNS system को कैसे इस्तेमाल करना चाहिए इस बारे में common assumptions को उलट देता है। मौजूदा software से जोड़ते समय complex integration की ज़रूरत नहीं होती, और DNS requests को सामान्य web API से ज़्यादा intuitive भी माना जा सकता है। censorship resistance के लिहाज़ से भी इसके फायदे होने की अच्छी संभावना है
    • DNS server को अलग port और अलग protocol इस्तेमाल करने वाले special web server की तरह समझें
      जैसे HTTP से web server को request भेजते हैं, वैसे ही DNS protocol से DNS server के साथ interact करते हैं। यह telnet से HTTP या SMTP request की नकल करने जैसा है—किसी खास ruleset के साथ किसी खास तरह के server से बात करना
      यह server result देने से पहले कुछ calculation करता है, और यही बात अधिकांश DNS records से अलग है जिन्हें आम तौर पर static expected किया जाता है
    • DNS protocol बस UDP के ऊपर text है। DNS request बनाते समय system socket खोलता है, उसमें google.com लिखता है और response पढ़ता है
      अगर server DNS server के रूप में ठीक से configured है, तो वह appropriate DNS records फिर text के रूप में respond करता है। google.com load balancing में इस्तेमाल होने वाले किसी subdomain की ओर इशारा करने वाला CNAME है, इसलिए server CNAME blabla.google.com जैसी किसी चीज़ से answer कर सकता है और चाहे तो blabla.google.com को भी साथ में resolve करके extra request की मेहनत बचा सकता है
      किसी RFC में defined DNS protocol यह तय करता है कि requests और responses एक खास तरीके से हों। उनमें से एक बात यह है कि non-existent top-level domain, जैसे अभी मौजूद न होने वाला .time, के लिए server को nxdomain respond करना चाहिए। लेकिन practical तौर पर server को current time जैसी कोई भी value respond करने से रोकने वाला कोई technical mechanism नहीं है
      सामान्य तौर पर, users की रक्षा करने वाली इकलौती चीज़ बस यह expectation है कि public हो या private, DNS operator झूठा data return नहीं करेगा। HTTPS इसे कुछ हद तक mitigate करता है, लेकिन DNS records खुद असल में असीम रूप से forgeable हैं और उन्हें पलटने का कोई तरीका नहीं है
  • हैरानी है कि ये features dns.toys के किसी subdomain के रूप में provide नहीं किए जाते। तब special name server इस्तेमाल किए बिना भी resolve हो जाते

    • default name server इस्तेमाल करने पर caching जैसी सारी आम DNS complexities बीच में आ जाएँगी
  • आजकल मैं मुख्य रूप से यह इस्तेमाल करता हूँ
    https://addr.tools/
    https://dnscheck.tools/
    https://myip.addr.tools/help