6 điểm bởi GN⁺ 2024-01-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • dns.toys là một máy chủ DNS tận dụng truy vấn DNS như một giao diện lệnh, cho phép chạy các tiện ích nhỏ ngay trong terminal chỉ bằng dig
  • Có thể xử lý ngay các tác vụ vốn phiền khi phải mở trang tìm kiếm, như giờ thế giới, thời tiết, chuyển đổi hơn 70 đơn vị, chuyển đổi tiền tệ dựa trên tỷ giá hằng ngày
  • Cũng cung cấp các chức năng cần thiết cho lập trình viên như tính toán dải CIDR, tạo UUID v4/NanoID, chuyển đổi Unix epoch, chuyển đổi hệ cơ số
  • Cách gọi là chỉ định @dns.toys; trong Bash, Fish, Zsh có thể thêm alias dy để dùng ngắn gọn hơn
  • Đây là dịch vụ hướng tới sự thú vị và tiện lợi khi kiểm tra/tính toán nhanh trong terminal hơn là một công cụ thực chiến, phù hợp với các tác vụ tra cứu đơn giản

Tiện ích terminal chạy bằng truy vấn DNS

  • dns.toys cung cấp nhiều chức năng dưới dạng máy chủ DNS, thực thi bằng cách gửi truy vấn dạng domain bằng dig
  • Thời gian, thời tiết, chuyển đổi

    • dig mumbai.time @dns.toys: tra cứu thời gian hiện tại của thành phố
    • dig 2023-05-28T14:00-mumbai-paris/fr.time @dns.toys: chuyển đổi múi giờ giữa các thành phố
    • dig mumbai.weather @dns.toys: tra cứu thời tiết của thành phố
    • dig 42km-mi.unit @dns.toys: chuyển đổi giữa hơn 70 đơn vị
    • dig 100USD-INR.fx @dns.toys: chuyển đổi tiền tệ dựa trên tỷ giá hằng ngày
    • dig -4 ip @dns.toys: kiểm tra địa chỉ IPv4 hoặc IPv6
  • Tính toán và chức năng cho lập trình viên

    • dig 10.0.0.0/24.cidr @dns.toys: tính IP khả dụng đầu tiên và cuối cùng trong subnet
    • dig 100dec-hex.base @dns.toys: chuyển đổi hệ cơ số giữa hex, dec, oct, bin
    • dig 784783800.epoch @dns.toys: chuyển Unix timestamp thành ngày tháng đọc được
    • dig 5.uuid @dns.toys: tạo UUID v4
    • dig 5.10.nanoid @dns.toys: tạo NanoID theo độ dài và số lượng chỉ định
  • Chức năng đồ chơi

    • dig pi @dns.toys: xuất các chữ số của Pi
    • dig 3d20/2.dice @dns.toys: tung xúc xắc với số lượng và số mặt chỉ định
    • dig 2.coin @dns.toys: tung đồng xu
    • dig 1-100.rand @dns.toys: tạo số ngẫu nhiên trong phạm vi
    • dig excuse @dns.toys: xuất một lời bào chữa ngẫu nhiên của lập trình viên

Shell alias để gọi ngắn gọn

  • Nếu thêm lệnh tắt dy, có thể gọi ngắn hơn như dy mumbai.weather
    • Bash: thêm alias dy="dig +short @dns.toys" vào ~/.bashrc
    • Fish: thêm alias dy="dig +noall +answer +additional $argv @dns.toys" vào ~/.config/fish/config.fish
    • Zsh: thêm alias dy="dig +short @dns.toys" vào ~/.zshrc
  • Người dùng dành nhiều thời gian trong terminal có thể nhanh chóng xử lý các tác vụ như chuyển đổi đơn vị hoặc kiểm tra thời tiết mà không cần mở các trang tìm kiếm nặng nề

1 bình luận

 
GN⁺ 2024-01-08
Ý kiến trên Hacker News
  • Nhớ lại một mẹo nhỏ trước đây tôi từng dùng khi tự viết tiện ích DNS động, để tính địa chỉ IP của máy mình một cách “ổn định”
    Các resolver OpenDNS (resolver1.opendns.com v.v.) sẽ phân giải myip.opendns.com thành địa chỉ IP thực tế. Tùy trạng thái kết nối, sẽ trả về bản ghi A hoặc AAAA, và vì IP của các resolver này thường là IP anycast, tôi muốn tin rằng nó sẽ nhanh hơn một chút so với việc gửi request đến một dịch vụ HTTP tập trung có thể chết bất cứ lúc nào
    Tất nhiên OpenDNS cũng có thể biến mất bất cứ lúc nào, nhưng tôi cho rằng rủi ro đó vẫn tốt hơn vô số dịch vụ HTTP kiểu “IP của tôi là gì?”. Tôi cũng từng nghe nói DNS vốn được dự định để xử lý dữ liệu ở phạm vi rộng hơn tên miền thông thường, và những thứ như bản ghi TXT là dấu vết của điều đó. Trang này cho thấy rõ những tiện ích có thể có được qua DNS

    • Google và Akamai cũng cung cấp dịch vụ DNS
      dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
      dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
    • OpenDNS và YouTube, bên nào có khả năng sập cao hơn?
      curl -4si0A "" https://www.youtube.com|sed -n '/ip=/{s/.*ip=//;s/\.*//p;};'|uniq
      OpenDNS và Cloudflare, bên nào có khả năng sập cao hơn? Cách dưới đây hoạt động với bất kỳ địa chỉ IP Cloudflare nào và cũng không cần TLS
      printf 'GET /cdn-cgi/trace HTTP/1.0\r\nHost: cloudflare.com |nc -vvn 104.18.25.13 80 |sed -n /ip=/p
      Có thể lấy danh sách IP của Cloudflare bằng curl -4si0A "" https://api.cloudflare.com/client/v4/ips. Có rất nhiều website in địa chỉ IP của client lên trang web hoặc trong HTTP header, và không nhất thiết phải là trang “What is my IP”
      Những website chặn một số request bằng Cloudflare cũng là một lựa chọn. Ví dụ, chỉ cần gửi HTTP request đến StackOverflow mà không có header User-Agent
      curl -si40A "" http://stackoverflow.com|sed -n '/cf-footer-ip">/{s/.*">//;s/<.*//p;}'
      Việc các trang “What is my IP” vẫn thành công dù địa chỉ IP của bạn được hiển thị trên hàng trăm nghìn website cũng khá đáng ngạc nhiên. Về tính hữu ích của DNS, cũng đáng tham khảo https://www.netmeister.org/blog/dns-rrs.html
    • Tôi đồng ý rằng hầu hết các dịch vụ HTTP để lấy IP trông không đáng tin cậy lắm về mặt thời gian hoạt động
      Tuy nhiên cũng có https://icanhazip.com/ do Cloudflare vận hành, và phía này có vẻ có khả năng ổn định hơn
      https://ipv4.icanhazip.com/
      https://ipv6.icanhazip.com/
    • Ý tưởng rất hay. Trông đơn giản hơn giao thức STUN rất nhiều
  • Tôi là fan cuồng của Julia Evans, cô ấy cũng đã làm vài món đồ chơi hữu ích liên quan đến DNS
    https://jvns.ca/
    https://dns-lookup.jvns.ca/
    https://messwithdns.net/

  • Các bài liên quan
    DNS Toys - https://news.ycombinator.com/item?id=31704789 - tháng 6 năm 2022, 104 bình luận
    DNS Toys: Useful utilities and services over DNS - https://news.ycombinator.com/item?id=31637226 - tháng 6 năm 2022, 1 bình luận

  • Đây là một bài thuyết trình gần đây của tác giả dự án này, có câu chuyện hậu trường thú vị về việc dự án ra đời như thế nào
    https://youtu.be/ANmFZ8rbmnc?si=ndEWH4xY2oxJuEnB

  • Lạ là
    dig A0.0,0.0/0.0,90.0.aerial @dns.toys

    dig A0.0,0.0/90.0,0.0.aerial @dns.toys
    đều trả về TXT "aerial distance = 10007.06 KM"
    Chu vi xích đạo là 40.075,017 km và chu vi qua hai cực là 40.007,863 km. Ngay cả nếu giả định Trái Đất có hình con bò tưởng tượng thì cũng không hại gì nhiều, và còn có thể tránh được chuỗi tính toán khó chịu để tìm khoảng cách ngắn nhất giữa hai điểm trên bề mặt ellipsoid

    • Thú vị thật. Các giá trị chu vi đó thực ra gần nhau hơn nhiều so với tôi nghĩ
  • Liên quan một chút, cũng có dịch vụ cung cấp danh sách doanh nghiệp ở Anh qua truy vấn DNS. Cùng một ý tưởng là cung cấp dữ liệu không phải DNS bằng dịch vụ DNS
    https://www.num.uk/
    Tuy nhiên nhìn roadmap thì có vẻ họ không còn duy trì dịch vụ nữa

    • Tốt nhất không nên dùng từ “lạm dụng”, trừ khi theo nghĩa kiểu “SOAP và XHR là sự ‘lạm dụng’ HTTP”
      Lớp IN (internet) bây giờ trông như một cây sequoia vươn cao nhờ tiến hóa, nhưng vào thời Cambri cũng từng có các lớp CH (chaos) và HS (hesiod). Rất đáng xem lại mục đích và mục tiêu của các dự án đó
      Trái lại, sự lạm dụng ngày nay có lẽ gần với việc tối ưu hóa chỉ cho các dịch vụ web dựa trên cloud, tức “happy eyeballs”, như cửa sổ 10 mili giây để truyền lại hoặc qname minimization, mà hy sinh mọi thứ khác. Chẳng hạn dường như cũng ít để ý đến những thứ như bufferbloat. Ngoài việc phân giải A/AAAA còn có cả một thế giới hoàn toàn khác
      Ở hành lang các hội nghị Internet, việc thấy hai người đeo pocket protector đấu kiếm, hoặc ít nhất là chọc nhau bằng bút chì, cũng không hiếm. RFC là “Request For Comments”, còn BCP (Best Current Practice) thì thường xuyên bị phớt lờ
  • Tôi thích cái này. Chỉ ước gì dig được cài trên mọi nền tảng
    Lúc nào cũng bực vì không dùng được trên Windows, và tôi kiểm tra thì thấy Debian cũng không có sẵn theo mặc định. Dĩ nhiên cài thì dễ. OpenBSD và Mac OS X thì có, vậy là tốt

    • Dog là đa nền tảng và cũng có vài tính năng hay như xuất JSON
      https://dns.lookup.dog/
    • Không nhất thiết phải dùng dig. nslookup hoặc host cũng chạy được
      Trên Windows chắc cũng phải có công cụ tra cứu DNS nào đó
  • Ai có thể giải thích như cho trẻ năm tuổi cho kẻ ngốc trong thread này không. Tôi biết là để cho vui, nhưng tôi không hiểu. Cũng không biết nó hoạt động thế nào, và tôi biết là do mình thiếu hiểu biết

    • Về bản chất, đây là phân giải các domain không tồn tại thông qua máy chủ DNS tùy chỉnh
      Ví dụ dig 100USD-INR.fx @dns.toys nghĩa là “hãy dùng dns.toys làm máy chủ DNS để phân giải 100USD-INR.fx”. Khi đó nó trả về một bản ghi TXT chứa câu trả lời thực tế
      .fx là domain không tồn tại nên không mạo danh ai cả; nếu đổi @dns.toys thành thứ như @8.8.8.8 thì sẽ không phân giải được gì
    • Hãy nghĩ đến một site như news.ycombinator.com. Trình duyệt tra cứu IP cho tên đó từ một máy chủ đặc biệt. Domain đó có thể được lưu đại khái như thế này
      A IP = ...1
      AAAA IP = ...2
      Ở đây A là loại bản ghi. Nhưng cũng có các loại bản ghi khác
      TXT gender = 'male'
      Có vài giả định thường được ngầm xem là đúng về DNS. Người ta dùng DNS như một tổng đài chuyển sang các dịch vụ khác, và các giá trị bên trong tổng đài nói chung là tĩnh
      Ở đây nó đang làm một việc hoàn toàn khác, vì trả về giá trị thay đổi theo domain. Để làm vậy cần máy chủ DNS tự viết, nhưng bản thân giao thức DNS khá đơn giản
      Điểm thông minh của trò hack này là DNS là một trong những giao thức được dùng và hỗ trợ rộng rãi nhất, nên các thư viện lập trình chủ đạo đều hỗ trợ và hệ điều hành cũng đã có sẵn nhiều công cụ dòng lệnh. Nếu cung cấp dưới dạng dịch vụ trên DNS, có thể truy cập từ công cụ và thư viện với phụ thuộc tối thiểu
      Ngoài ra, nó lật ngược các giả định thông thường về cách nên dùng hệ thống DNS, bằng cách khiến DNS được dùng trực tiếp như một dịch vụ ứng dụng chứ không phải tổng đài cho các dịch vụ Internet thông thường. Khi gắn vào phần mềm hiện có cũng không cần tích hợp phức tạp, và có thể xem yêu cầu DNS là trực quan hơn so với API web thông thường. Có lẽ cũng có lợi về khả năng chống kiểm duyệt
    • Có thể nghĩ máy chủ DNS như một máy chủ web đặc biệt dùng cổng khác và giao thức khác
      Giống như gửi request HTTP tới web server, ta tương tác với DNS server bằng giao thức DNS. Tương tự việc giả lập request HTTP hoặc SMTP bằng telnet, tức là giao tiếp với một loại server nhất định theo một bộ quy tắc nhất định
      Server này thực hiện một mức tính toán nào đó trước khi trả kết quả, khác với phần lớn bản ghi DNS vốn thường được kỳ vọng là tĩnh
    • Giao thức DNS đơn giản chỉ là văn bản trên UDP. Khi tạo yêu cầu DNS, hệ thống mở một socket, ghi google.com vào đó rồi đọc phản hồi
      Nếu server được cấu hình đúng là DNS server, nó sẽ trả lại các bản ghi DNS phù hợp dưới dạng văn bản. Vì google.com là CNAME trỏ đến một subdomain nào đó dùng cho cân bằng tải, server sẽ trả lời kiểu CNAME blabla.google.com và nếu muốn có thể phân giải luôn cả blabla.google.com để đỡ phải gửi thêm request
      Giao thức DNS được định nghĩa trong một RFC nào đó quy định request và response phải làm theo cách nhất định. Một trong số đó là với top-level domain không tồn tại, ví dụ .time hiện không tồn tại, server phải trả về nxdomain. Nhưng trong thực tế, không có cơ chế kỹ thuật nào ngăn server trả về bất kỳ giá trị nào, chẳng hạn thời gian hiện tại
      Nói chung, điều duy nhất bảo vệ người dùng là kỳ vọng rằng nhà vận hành DNS, dù công khai hay riêng tư, sẽ không trả về dữ liệu nhảm. HTTPS giảm nhẹ phần nào, nhưng bản thân bản ghi DNS về cơ bản có thể bị giả mạo vô hạn và không có cách đảo ngược
  • Thật ngạc nhiên là các tính năng này không được cung cấp dưới bất kỳ subdomain nào của dns.toys. Như vậy sẽ phân giải được mà không cần dùng nameserver đặc biệt

    • Nếu dùng nameserver mặc định thì mọi độ phức tạp của DNS thông thường như caching sẽ chen vào
  • Dạo này tôi chủ yếu dùng cái này
    https://addr.tools/
    https://dnscheck.tools/
    https://myip.addr.tools/help