Date: 2017mar11
OS: Android
Keywords: Domain Name System, tool, tools, whois
Q. What is the best DNS Lookup app for Android?
A. I'm biased but I think mine is the best.
https://play.google.com/store/apps/details?id=com.recursivepizza.dnsexplorer
There are other DNS Lookup Android apps. What makes mine the best?
The Start
---------
For fun, I made a "dig" (domain information groper) command for Windows --
mostly to see how DNS worked. Did you know it has a basic compression
scheme? Anyhow, I noticed that when you do a DNS query you
get back other domains (eg the mail server, etc). So I got the idea
of making those domains hyperlinks so you could do a DNS lookup on those.
That called for a graphical user interface. Might as well do it for Android.
I translated the app from C++ to Java. Often writing the same program twice helps with
a cleaner implementation.
I added information about all record types.
Not just the common ones. There are many more than I first knew about
https://en.wikipedia.org/wiki/List_of_DNS_record_types
I made it robust. It can't crash even if a DNS server returns
incorrectly formatted data.
Of course, now-a-days it has to support IPv4 and IPv6 without preference.
Hyperlinks
----------
As I mentioned, I made the results clickable.
This is definitely a unique feature.
The standard Android <back button takes you to your previous query.
Other app developers: it registers a scheme so your
app can do <a href=dns://apple.com>Lookup Apple</a> in its html!
Reverse Lookup
--------------
If you enter an IP-address to lookup (or click on one) it will
automatically do a reverse lookup.
Query Types
-----------
The Domain Name System holds different types of records. The most important
are the A and AAAA records for converting a domain name to an IP-address.
By default we do an ANY query which get the most common types
of records. Officially it returns only "cached" records but most
people call it the "all" query.
You have a choice to query for the most common record types individually here.
To save you time we provide a "multi" query which will
go get the most common records one-at-a-time. It's basically
a more reliable but slightly slower ANY.
In testing I found some servers would refuse to do ANY queries.
So I added the "smart" query which attempts to do an ANY (fast)
but will revert to a "multi" (slower) if that's refused or fails
for another reason (eg nothing cached).
As far as I know, no other DNS Lookup app has this range of query type options.
DNS Server
----------
I wanted the most flexibility and convenience for the user selecting
a server. So I provided the following choices:
- Default
- Google
- OpenDNS
- Custom
Default: As you might expect the Default server is what it uses, um, by default.
This is the DNS server your phone/tablet has been assigned by your
local Wi-Fi server -- usually with DHCP. This is the DNS server a
browser on your device will use.
Google: Google operates a public DNS server. It's sometimes faster than the closer ISP-provided server.
OpenDNS: Wikipedia says: "OpenDNS is a company and service which extends the Domain Name System by adding features such as phishing
protection and optional content filtering in addition to DNS lookup, if its DNS servers are used."
Custom: you can enter the IP-address or domain name(!) of any server on the internet here.
(If you want to run a caching DNS server I recommend dnsmasq)
If you have just set up or made a change to your domain it's a good idea
to query it using multiple servers.
Verbose Level
-------------
Sometimes you want a lot of info and sometimes just the minimum.
So I added a verbosity level choice. The "medium" level is the
same as the "dig" command. This is a useful format since it's
ready to be dropped into the BIND DNS server config file.
The "high" level gives more detail and a less cramped output.
For example, in "medium" the SOA record just lists a bunch of numbers -- in "high"
they are all labelled. Every time you update your DNS record
you are supposed to update its serial number. Many people use
the date at the start of the serial number - eg 20170312123.
In "high" my app recognizes that and will show the date in a friendly way:
Serial Number: 20170312123 (2017-Mar-12)
It's unofficial, but it's usually the date the record was updated.
Which can be useful to know.
There are lots of times in seconds in DNS. In "high" level
they are conveniently converted to more human units.
So instead of:
Time-to-Live: 3600 seconds
You get:
Time-to-Live: 1 hour
Another example:
Time-to-Live: 7 days, 3 hours
Copy to Clipboard
-----------------
Now you have the DNS Lookup in the right amount of verbosity you can
copy it to the clipboard using a menu choice.
I noticed another DNS Lookup app had an option to send the results as mail.
Oh so limiting ;)
Of course, you can paste from the clipboard into a mail.
Trial by Peers
--------------
At this point I thought the app was pretty good.
But what would other Android developers think? I posted it on a forum.
They tried it out and came back with some useful comments.
The icon was hard to see on the background - I fixed that.
One gentleman looked up up his domain and found that the contact email
was formatted incorrectly. The app put the @ in the wrong place.
I fixed that. (By the way, from what I have seen, no other DNS Lookup
apps, even bother doing this.)
They pointed out that the results went away after returning from the
Settings. So I made it stay -- unless you changed the settings
in which case it redid the query.
It was great to get some constructive feedback.
Conclusion
----------
I hope you can see why I think it's the best DNS Lookup app for Android.
https://play.google.com/store/apps/details?id=com.recursivepizza.dnsexplorer