Python, Java, JavaScript, C#, etc. can't say the same.
From the readme:
> It's totally inspired from dog [0] which is written in Rust. I wanted to add some features to it but since I don't know Rust, I found it as a nice opportunity to experiment with writing a DNS Client from scratch in Go myself. Hence the name dog +go => doggo.
go: downloading github.com/mr-karan/doggo v0.5.7
go: github.com/mr-karan/doggo/cmd@latest:
module github.com/mr-karan/doggo@latest found (v0.5.7),
but does not contain package github.com/mr-karan/doggo/cmd go install github.com/mr-karan/doggo/cmd@latest
go: downloading github.com/mr-karan/doggo v1.0.02. What is there to configure?
3. It’s a Go program, so compilation happens transparently on installation provided the developers don’t release broken code. This isn’t the C/C++ world where you have complex bespoke build systems that only seem to work on the developers’ machines.
docker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MXShort answer: Why not :)
$ curl ipkitten.com
27.44.144.144
And if you visit it in a browser, you get your IP address and a kitten GIF!: $ curl ipinfo.io/json
or you can look up these details for any other IP: $ curl ipinfo.io/18.18.18.18It has a ton of bells and whistles, including summarize IPs, bulk enrichment, grepip, and a ton of network-related tools. I was writing a series of blog posts on the CLI, but I think the series got too long and left users to discover the features of the CLI on their own.
~ doggo google.com
NAME TYPE CLASS TTL ADDRESS NAMESERVER
google.com. A IN 296s 142.250.67.14 127.0.2.2:53
google.com. A IN 296s 142.250.67.14 127.0.2.3:53
~ doggo news.ycombinator.com
NAME TYPE CLASS TTL ADDRESS NAMESERVER
news.ycombinator.com. A IN 1s 209.216.230.207 127.0.2.2:53
news.ycombinator.com. A IN 1s 209.216.230.207 127.0.2.3:53
You could have a look at https://dnsdiag.org/ that provides a few tools for further introspection in the many (different) answers resolvers can give.
doggo google.com --short
142.250.185.238> It's totally inspired from dog which is written in Rust. I wanted to add some features to it but since I don't know Rust, I found it as a nice opportunity to experiment with writing a DNS Client from scratch in Go myself. Hence the name dog +go => doggo.
There’s are a bunch of cli tools: dig like tool called ‘dns’, a stub resolver called ‘resolve’, a recursive resolver called ‘recurse’, and some other random maintenance tools. These are all to make it easier to test certain details outside other people’s dependency trees.
The documentation is a little sparse…
Is there a way to query all DNS records? (I was surprised to learn that isn't the default.) This would be really helpful for troubleshooting people's Caddy questions (which are actually DNS problems).
At Andrew McWatters & Co., we use a small internal utility called digany(1)[1][2] that does this for you.
[1]: https://github.com/andrewmcwattersandco/digany
[2]: https://github.com/andrewmcwattersandco/digany/blob/main/dig...
andrewmcwatters@Andrews-MacBook-Pro digany % ./digany andrewmcwatters.com
andrewmcwatters.com. 1799 IN A 107.172.29.10
andrewmcwatters.com. 1800 IN NS dns1.registrar-servers.com.
andrewmcwatters.com. 1800 IN NS dns2.registrar-servers.com.
andrewmcwatters.com. 3601 IN SOA dns1.registrar-servers.com. hostmaster.registrar-servers.com. 1719805485 43200 3600 604800 3601
andrewmcwatters.com. 1800 IN MX 20 eforward5.registrar-servers.com.
andrewmcwatters.com. 1800 IN MX 15 eforward4.registrar-servers.com.
andrewmcwatters.com. 1800 IN MX 10 eforward1.registrar-servers.com.
andrewmcwatters.com. 1800 IN MX 10 eforward2.registrar-servers.com.
andrewmcwatters.com. 1800 IN MX 10 eforward3.registrar-servers.com.
andrewmcwatters.com. 1799 IN TXT "google-site-verification=39W1-Db36mrNNekPXww8TUdo7LcrmEUfv-gBmVTT1Dk"
andrewmcwatters.com. 1799 IN TXT "v=spf1 include:spf.efwd.registrar-servers.com a:andrewmcwatters-17ce78.andrewmcwatters.com ~all"
...However, each lookup happens serially right now, I'll take a look at making it concurrent per resolver atleast.
Edit: I just pushed the concurrent version of lookups in each resolver. Speed up is quite good around 70-80% on most domains. Will test this more before releasing to main!
https://github.com/mr-karan/doggo/pull/128#issuecomment-2202...
alias doggo-all='doggo $1 A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME CSYNC DHCID DLV DNAME DNSKEY DS EUI48 EUI64 HINFO HIP HTTPS IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM OPENPGPKEY RRSIG RP SIG SMIMEA SOA SRV SSHFP SVCB TLSA TSIG TXT URI ZONEMD ${2:+@$2}'
doggo-all example.com @1.1.1.1 $ doggo google.com A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME CSYNC DHCID DLV DNAME DNSKEY DS EUI48 EUI64 HINFO HIP HTTPS IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM OPENPGPKEY RRSIG RP SIG SMIMEA SOA SRV SSHFP SVCB TLSA TSIG TXT URI ZONEMD
It takes 5+ seconds to get a response.Classic `dig` though takes 50ms.
$ geodns ycombinator.com
108.156.133.117 Singapore
108.156.133.21 Singapore
108.156.133.25 Singapore
108.156.133.59 Singapore
108.156.39.26 London
108.156.39.61 London
108.156.39.62 London
108.156.39.64 London
13.32.27.123 Frankfurt am Main
13.32.27.47 Frankfurt am Main
13.32.27.51 Frankfurt am Main
13.32.27.80 Frankfurt am Main
13.35.93.12 Clifton
13.35.93.14 Clifton
13.35.93.46 Clifton
13.35.93.47 Clifton
18.239.94.100 Amsterdam
18.239.94.114 Amsterdam
18.239.94.33 Amsterdam
18.239.94.79 Amsterdam
99.86.20.42 Doddaballapura
99.86.20.54 Doddaballapura
99.86.20.64 Doddaballapura
99.86.20.96 Doddaballapura
https://gitlab.com/shodan-public/geonet-rs > dig +short news.ycombinator.com
209.216.230.207
> ipinfo 209.216.230.207
{
"ip": "209.216.230.207",
"hostname": "news.ycombinator.com",
"city": "San Diego",
"region": "California",
"country": "US",
"loc": "32.7157,-117.1647",
"org": "AS21581 M5 Computer Security",
"postal": "92101",
"timezone": "America/Los_Angeles",
"readme": "https://ipinfo.io/missingauth"
}
It was moved to AWS temporarily the last time the servers failed: https://news.ycombinator.com/item?id=32031136Will release soon
Both ask for the specific query to run (A, AAAA, etc.). Why not default to query all records? (at least when querying a single domain).
--
---
1: https://en.wikipedia.org/wiki/List_of_DNS_record_types#/medi...
curl -H "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=ycombinator.com&type=A"I've built this using Go, my daily driver. It doesn't use any CLI frameworks, that was mostly out of choice as I didn't want to add external deps unless really required. My favourite part was to build this small help.go[3] utility which renders colored/formatted help text.
Over the time I got some good quality external contributions, especially the one from @jedisct1 for adding DNSCrypt[2] support to it.
Releasing a v1.0 has been on the back burner forever (like, a whole year+ :'). Life, other projects, and probably a bit of procrastination got in the way. Finally sat down last week and forced myself to come up with a deadline to push this out.
[1]: https://mrkaran.dev/posts/ndots-kubernetes/
[2]: https://github.com/mr-karan/doggo/pull/17
[3]: https://github.com/mr-karan/doggo/blob/main/cmd/help.go
doggo has been my main DNS tool for a while, now. Love it!
Was just mentioning on my other comment[1] about your contributions to the tool.
Meanwhile, the docs link is https://doggo.mrkaran.dev/docs/
Or is it a client to control and configure the DNS servers a computer is using?
or both?
BTW, the "visit demo" link in the docs returns 404.
Yes, you can run the web server locally: https://github.com/mr-karan/doggo/tree/main/web
cd web
go run .Here is a demo video, you can take a look: https://x-cmd.com/pkg/doggo
BTW I really enjoyed reading your blog on Nomad while setting up our own clusters, kudos!