Get IPv4 and IPv6 with one command

I would like to know if it's possible to get IPv4 and IPv6 addresses with just one invocation of dig?

For example, this gives the IPv4 address:

dig hostname A

And this command will give me the IPv6 address:

dig hostname AAAA

How can I get both addresses, IPv4 and IPv6, with just one command?


Solution 1:

It may be that this has been added to dig since the question was asked, but for completeness this can be accomplished through the following query:

dig hostname A hostname AAAA +short

Source: http://linux.die.net/man/1/dig -- under the 'Multiple Queries' section

Solution 2:

If you're querying an authoritative server for the domain, you can get all the records for a name with an ANY query:

dig hostname ANY @servername

However, this won't work reliably if you're querying a caching server. When a caching server responds to an ANY query, it returns whatever records happen to be in cache at the time. If the name has both A and AAAA records, but the server has only looked up the A records recently, the AAAA records won't be in the cache, so it won't return them.

Furthermore, there is a proposal to allow DNS servers to refuse to answer ANY queries: Providing Minimal-Sized Responses to DNS Queries that have QTYPE=ANY. If you query a server that implements this, you may not be able to get both responses with a single query (although one of the suggestions in that draft is that an ANY query might just return all MX, A, and AAAA, since this is often what clients want). So for best reliability, you should just make two queries.