2 puan yazan GN⁺ 2024-07-02 | 1 yorum | WhatsApp'ta paylaş
  • Doggo, DNS sorgu sonuçlarını renkli ve tablo biçiminde gösteren bir komut satırı istemcisidir; amacı terminalde insanın rahat okuyabileceği bir çıktı sunmaktır
  • Otomasyon ortamlarında JSON çıktısı kullanılabilir ve yanıt süresi ölçümü ile hata ayıklama modu sayesinde sorun analizi için de yararlanılabilir
  • DNS over HTTPS, TLS, QUIC, TCP, UDP, DNSCrypt gibi çeşitli taşıma protokollerini tek bir araçta ele alabilir
  • EDNS Client Subnet, NSID, DNS Cookies, EDNS Padding, Extended DNS Errors gibi EDNS özelliklerini ve glue record işlemeyi destekler
  • Linux, macOS, Windows, FreeBSD ve NetBSD üzerinde çalışır; web arayüzü ve kabuk tamamlama da sunduğu için hem yerel CLI'da hem de tarayıcıda kullanılabilir

Terminalde okunması kolay DNS sorguları

  • Doggo, insanlar için bir komut satırı DNS istemcisi olmayı hedefler
  • Varsayılan çıktı, renk ayrımı ve tablo tabanlı biçimden oluşur; bu da DNS yanıtlarını hızlıca gözden geçirmeyi kolaylaştırır
  • Betik yazımı veya ayrıştırma gerektiğinde JSON çıktısı kullanılabilir
  • Hata ayıklama modu ve yanıt süresi ölçümünü birlikte sunarak yalnızca sorgu sonucunu değil, çalışma sürecini de görmeyi mümkün kılar

Desteklenen DNS protokolleri ve veriler

  • Birden fazla DNS taşıma protokolünü destekler
    • DNS over HTTPS
    • DNS over TLS
    • DNS over QUIC
    • DNS over TCP
    • DNS over UDP
    • DNSCrypt
  • EDNS ile ilgili özellikleri de geniş kapsamda içerir
    • EDNS Client Subnet(ECS) üzerinden konum farkındalıklı yanıtlar
    • Name Server Identifier(NSID)
    • DNS Cookies
    • EDNS Padding
    • Extended DNS Errors(EDE)
  • additional section içindeki glue record ve yardımcı DNS verilerini işleyebilir
  • Internationalized Domain Names(IDN) için otomatik punycode dönüşümünü destekler
  • Reverse DNS lookup ile AA, AD, CD, DO gibi çeşitli DNS bayraklarını da ele alabilir

Yapılandırma, resolver'lar ve çalışma ortamı

  • resolv.conf veya komut satırı argümanları üzerinden ndots ve search ayarları kullanılabilir
  • Birden fazla resolver belirtilebilir ve sorgu stratejisi de kullanıcı tarafından özelleştirilebilir
  • Hem IPv4 hem de IPv6 desteklenir
  • doggo.mrkaran.dev üzerinde web arayüzü sunulur
  • zsh ve fish için kabuk tamamlama desteği sağlar
  • Desteklenen platformlar Linux, macOS, Windows, FreeBSD ve NetBSD'dir

1 yorum

 
GN⁺ 2024-07-02
Hacker News yorumları
  • Gerçekten harika görünüyor. Neden yaptığını, tasarım kararlarını ve perde arkası bağlamı biraz daha paylaşabilir misin?

    • Öğrenme amaçlı ve hobi yan projesi olarak yaptım. 2021’de K8s kümeleriyle çok uğraşırken ndots ile tanıştım; ana makine ortamı yüzünden beklenmedik davranışlar yaşamayacağım, kullanımı kolay bir DNS istemcisi yapmak istedim.
      Çoğunlukla kullandığım Go ile yazdım; kesinlikle gerekmedikçe dış bağımlılık eklemek istemediğim için bir CLI framework’ü kullanmadım. Özellikle renkli ve biçimlendirilmiş yardım metnini render eden küçük help.go yardımcı aracını yapmış olmaktan memnunum.
      Zaman içinde iyi dış katkılar da geldi; özellikle @jedisct1’in DNSCrypt desteği eklemesi büyük bir katkıydı. v1.0 sürümü bir yıldan uzun süre sürekli ertelendi; hayat, başka projeler ve biraz da erteleme üst üste geldi. Ancak geçen hafta kendime bir son tarih koyup işi bitirdim.
      ndots ile ilgili yazı: https://mrkaran.dev/posts/ndots-kubernetes/
  • İsim seçimi harika. Köpekler (doggo) kazmayı (dig) sever ne de olsa.

    • Bugün öğrendim ki dog da varmış. Muhtemelen dig için yaygın bir yazım hatası da olabilir.
  • Bir Docker imajı olması da güzel. Belgelerde çalıştırma sonrası temizlik için --rm ve renkler için -t seçenekleri eklenirse iyi olur.
    docker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MX

    • Merak ettim; bağımlılığı olmayan bir DNS CLI yardımcı aracını özellikle Docker konteyneri hâline getirmek için bu kadar uğraşmaya değer mi?
  • Biraz aptalca bir soru olabilir ama çıktı neden tamamen iki kez geliyor?
    doggo google.com çalıştırınca 127.0.2.2:53 ve 127.0.2.3:53 üzerinden aynı A kaydı ayrı ayrı geliyor; doggo news.ycombinator.com için de benzer şekilde iki ad sunucusunun sonuçları yazdırılıyor.

    • Yapılandırılmış her ad sunucusu için bir kez yazdırılıyor gibi görünüyor. Gerçekte nadir de olsa farklı yanıtlar verebilecekleri için böyle olabilir.
    • Kendi AdGuard DNS sunucumda denedim, yalnızca tek bir öğe çıktı. Ad sunucusu ayarlarıyla ilgili gibi.
      @1.1.1.1 gibi özel bir ad sunucusu belirleyerek yeniden üretebilir misin? doggo google.com --short yalnızca 142.250.185.238 döndürdü.
  • Bu araç ANY ile eşdeğer bir sorgu türünü desteklese gerçekten iyi olurdu.

  • Harika bir proje. Geçen yıl x-cmd pkg geliştirirken öğrenmiştim; o zaman en güncel sürüm 0.5.7 idi, şimdi 1.0.2 olmuş, bu yüzden sürüm yükseltmesi gerekiyor gibi görünüyor.
    Bir demo videosu da var: https://x-cmd.com/pkg/doggo

  • https://github.com/ogham/dog aklıma geldi.

    • doggo GitHub README’sine göre, Rust ile yazılmış dogdan tamamen ilham alınmış; Rust bilmediği ama özellik eklemek istediği için Go ile sıfırdan bir DNS istemcisi yazmayı iyi bir fırsat olarak görmüş.
      Bu yüzden isim de dog + go => doggo olmuş.
    • Ne yazık ki dog bakımı yapılmıyor gibi görünüyor.
  • Bu tür araçların çoğunun Go ile yazılmasının bir nedeni var mı? Standart kütüphane yüzünden mi, yoksa sadece tesadüf mü merak ediyorum.

    • Go varsayılan olarak çoğunlukla statik derlenmiş ikili dosyalar üretir. Runtime yok, yorumlayıcı yok, bağımlılık yok.
      Python, Java, JavaScript, C# vb. için aynı şeyi söylemek zor.
    • Kültürel bir nedeni de olabilir. Go, DevOps/bulut altyapısı alanında çok görünür.
      k8s, Terraform ve provider’ları gibi birçok araç Go ile yazıldı; kurum içi araç yazımında da popülerlik açısından Python’la yarışıyor.
    • Bu durumda geliştirici zaten Go bildiği için kullanmış gibi görünüyor.
      README’ye göre Rust ile yazılmış dogdan ilham almış; Rust bilmediği ama özellik eklemek istediği için Go ile kendi DNS istemcisini yazmaya başlamış. Bu yüzden isim de dog + go => doggo.
      https://github.com/ogham/dog
    • Go işi bitirmeni sağlar ve ortaya çıkan şey uzun süre dayanır.
    • Tabii ki ismi kelime oyunu yapmaya izin verdiği için.
  • Bunun Dog ile bir ilgisi var mı? Özellikleri neredeyse aynı görünüyor.
    İkisi de çalıştırılacak belirli sorguyu (A, AAAA vb.) istemekte; neden varsayılanı tüm kayıtları sorgulamak olmasın? En azından tek bir alan adını sorgularken bu mümkün gibi görünüyor.
    https://github.com/mr-karan/doggo

    • Burada tüm kayıtlar derken tam olarak neyi kastediyorsun? dig varsayılan olarak yalnızca A kaydını gösterir; ben de davranışı aynı tuttum.
      Olası tüm kayıt türlerinin tamamını mı söylüyorsun, yoksa MX, AAAA, A, CNAME, TXT gibi yaygın birkaç türü mü merak ediyorum.
  • 1.0 sürümü için tebrikler. doggo bir süredir benim ana DNS aracım ve gerçekten seviyorum.