Doggo - Ứng dụng DNS dòng lệnh thân thiện với người dùng
(doggo.mrkaran.dev)- Doggo là một ứng dụng dòng lệnh hiển thị kết quả truy vấn DNS bằng phân biệt màu sắc và dạng bảng, hướng tới đầu ra dễ đọc cho con người trong terminal
- Trong môi trường tự động hóa có thể dùng đầu ra JSON, đồng thời cũng hữu ích cho phân tích sự cố nhờ đo thời gian phản hồi và chế độ debug
- Có thể xử lý nhiều giao thức truyền tải như DNS over HTTPS, TLS, QUIC, TCP, UDP, DNSCrypt trong một công cụ
- Hỗ trợ các tính năng EDNS như EDNS Client Subnet, NSID, DNS Cookies, EDNS Padding, Extended DNS Errors và xử lý glue record
- Hoạt động trên Linux, macOS, Windows, FreeBSD, NetBSD; cung cấp cả giao diện web và shell completion, nên có thể dùng cả ở CLI cục bộ lẫn trình duyệt
Truy vấn DNS dễ đọc trong terminal
- Doggo tự định vị là ứng dụng DNS dòng lệnh dành cho con người
- Đầu ra mặc định được cấu thành theo định dạng dựa trên bảng và phân biệt màu sắc, thuận tiện để lướt nhanh phản hồi DNS
- Khi cần scripting hoặc parsing, có thể dùng đầu ra JSON
- Cung cấp cả chế độ debug và đo thời gian phản hồi, giúp kiểm tra không chỉ kết quả truy vấn mà cả quá trình hoạt động
Các giao thức và dữ liệu DNS được hỗ trợ
- Hỗ trợ nhiều giao thức truyền tải DNS
- DNS over HTTPS
- DNS over TLS
- DNS over QUIC
- DNS over TCP
- DNS over UDP
- DNSCrypt
- Cũng bao gồm rộng rãi các tính năng liên quan đến EDNS
- Phản hồi nhận biết vị trí thông qua EDNS Client Subnet(ECS)
- Name Server Identifier(NSID)
- DNS Cookies
- EDNS Padding
- Extended DNS Errors(EDE)
- Có thể xử lý glue record trong additional section và dữ liệu DNS bổ trợ
- Internationalized Domain Names(IDN) hỗ trợ tự động chuyển đổi punycode
- Cũng có thể xử lý Reverse DNS lookup và nhiều cờ DNS như AA, AD, CD, DO
Cấu hình, resolver và môi trường chạy
- Có thể dùng cấu hình
ndotsvàsearchtừresolv.confhoặc tham số dòng lệnh - Có thể chỉ định nhiều resolver và tùy chỉnh cả chiến lược truy vấn
- Hỗ trợ cả IPv4 và IPv6
- Cung cấp giao diện web tại doggo.mrkaran.dev
- Cung cấp shell completion cho
zshvàfish - Các nền tảng được hỗ trợ là Linux, macOS, Windows, FreeBSD, NetBSD
1 bình luận
Ý kiến trên Hacker News
Trông thật sự rất hay. Bạn có thể chia sẻ thêm vì sao bạn tạo ra nó, các quyết định thiết kế, và bối cảnh hậu trường không?
ndots, và muốn tạo một DNS client dễ dùng, không gặp hành vi ngoài dự kiến do môi trường hostMình viết bằng Go, ngôn ngữ mình dùng chủ yếu, và vì không muốn thêm phụ thuộc bên ngoài nếu không thật sự cần thiết nên mình không dùng CLI framework. Mình đặc biệt thích phần tạo tiện ích nhỏ help.go để render văn bản trợ giúp có màu sắc và định dạng
Theo thời gian, dự án cũng nhận được những đóng góp bên ngoài rất tốt, đặc biệt là @jedisct1 đã thêm hỗ trợ DNSCrypt, đây là đóng góp lớn. Bản phát hành v1.0 bị trì hoãn hơn một năm, do cuộc sống, các dự án khác và một chút trì hoãn; mãi tuần trước mình mới đặt hạn chót và thúc đẩy để hoàn tất
Bài viết liên quan đến
ndots: https://mrkaran.dev/posts/ndots-kubernetes/Chọn tên rất hay. Chó con (doggo) thích đào đất (dig) mà
digCó Docker image cũng hay. Sẽ tốt hơn nếu tài liệu thêm tùy chọn
--rmđể dọn dẹp sau khi chạy và-tđể có màudocker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MXCó thể là câu hỏi hơi ngớ ngẩn, nhưng vì sao toàn bộ output lại xuất hiện hai lần?
Khi chạy
doggo google.com, cùng một bản ghi A được trả về lần lượt từ127.0.2.2:53và127.0.2.3:53;doggo news.ycombinator.comcũng tương tự, in ra kết quả từ hai nameserverBạn có thể thử tái hiện bằng cách chỉ định nameserver tùy chỉnh như
@1.1.1.1không?doggo google.com --shortchỉ trả về một giá trị142.250.185.238Sẽ thật tuyệt nếu công cụ này hỗ trợ loại truy vấn tương đương với
ANYSẽ phát hành sớm
Dự án hay đấy. Năm ngoái khi phát triển x-cmd pkg mình biết đến nó; lúc đó phiên bản mới nhất là 0.5.7, giờ đã là 1.0.2 nên có vẻ cần nâng cấp phiên bản
Cũng có video demo: https://x-cmd.com/pkg/doggo
Làm mình nhớ đến https://github.com/ogham/dog
dogviết bằng Rust; tác giả không biết Rust nhưng muốn thêm tính năng, nên xem đây là cơ hội tốt để tự viết một DNS client từ đầu bằng GoVì vậy tên cũng trở thành
dog + go => doggodogcó vẻ không còn được bảo trìCó lý do nào khiến nhiều công cụ kiểu này được viết bằng Go không? Không rõ là vì thư viện chuẩn, hay chỉ là ngẫu nhiên
Python, Java, JavaScript, C# v.v. thì khó nói điều tương tự
Rất nhiều công cụ như k8s, Terraform và các provider của nó được viết bằng Go, và trong việc viết công cụ nội bộ thì nó khá cạnh tranh với Python về độ phổ biến
Theo README, dự án được truyền cảm hứng từ
dogviết bằng Rust; tác giả không biết Rust nhưng muốn thêm tính năng, nên đã tự viết DNS client bằng Go. Vì vậy tên cũng làdog + go => doggohttps://github.com/ogham/dog
Cái này có liên quan đến Dog không? Tính năng trông gần như giống hệt
Cả hai đều yêu cầu loại truy vấn cụ thể cần chạy (A, AAAA, v.v.), vậy vì sao không mặc định truy vấn mọi bản ghi? Ít nhất khi truy vấn một domain duy nhất thì có vẻ làm được
https://github.com/mr-karan/doggo
digmặc định chỉ hiển thị bản ghi A, và mình cũng giữ hành vi giống vậyMình muốn biết bạn đang nói đến toàn bộ mọi loại bản ghi có thể có, hay một vài loại phổ biến như
MX, AAAA, A, CNAME, TXTChúc mừng bản phát hành 1.0. doggo đã là công cụ DNS chính của mình một thời gian, và mình thật sự rất thích nó