WHOIS for new TLDs
With the huge amount of new TLDs being released over the past few years, the built-in whois
client in Linux can't seem to keep its builtin WHOIS server database up-to-date. Here, we'll look at an easy way to determine the registry's WHOIS server, and query it from the shell. Then generate our own whois.conf
file to make future lookups seamless.
If you're short on time, jump to the end of the article for a link to the updated
whois.conf
file containing up-to-date WHOIS servers for the new gTLDs
Determining the correct server
Likely, you've come across a few domains that you've tried to query due to a DNS problem, or to check the registration info, and you came across a message similar to this:
jacob@minorin:~$ whois mori.moe
No whois server is known for this kind of object.
This is because the GNU whois
program on most Linux distros comes with the WHOIS server list compiled into the binary. The good news is that you can create a /etc/whois.conf
file, which contains a list of regular expressions that correspond to WHOIS servers. However, if you don't want to muck around with this, we can use the whois-servers.net
DNS entries to determine the correct WHOIS server.
jacob@minorin:~$ dig +short CNAME moe.whois-servers.net
whois.nic.moe.
Yay! Now that we have the WHOIS server, we can use the -h
flag in whois to query that server directly. Also, before we move on, it's important to note that "official" source for WHOIS server information is whois.iana.org
. For most TLDs, IANA will return an attribute titled whois. Example:
jacob@minorin:~$ whois org -h whois.iana.org | grep whois
whois: whois.pir.org
Moving on to the query:
jacob@minorin:~$ whois mori.moe -h whois.nic.moe
Domain Name: MORI.MOE
Domain ID: D389770-MOE
Sponsoring Registrar: BR domain Inc.
Sponsoring Registrar IANA ID: 1898
Registrar URL (registration services): http://www.brdomain.jp
Domain Status: clientTransferProhibited
You can combine the two if you're lazy and don't want to re-type or copy/paste the server name, like so:
jacob@minorin:~$ whois mori.moe -h `dig +short CNAME moe.whois-servers.net`
For 3rd level registrations, such as
amazon.co.uk
, you would query the WHOIS server for the top-level domain (such asuk
in this example) in most cases -- however, there are certain 2nd level domains that have their own WHOIS server. If you can't find the domain in the TLD registry's database, do a WHOIS query to IANA for the 2nd level domain to determine if it has its own WHOIS server (eg.whois co.il -h whois.iana.org
)
Creating a whois.conf file
For a more elegant solution, you can add the entries for each of the new TLD WHOIS servers to the /etc/whois.conf
file. By default, this file doesn't exist, so you'll probably have to create it.
To automate this process, I wrote a simple PHP script which fetches the official list from IANA to enumerate all (public) TLDs, then iterates through the list to determine WHOIS server information from whois-servers.net
and whois.iana.org
for each of the TLDs. It then uses this information to generate a shiny new whois.conf
file and a JSON file that can be used for other purposes.
yc_whoisgen (PHP source, plain text)
As of this writing (15 Mar 2015), there are over 800 top-level domains. You can simply add new entries to your whois.conf
as you encounter them, or utilize the script above to generate a new list for yourself. Linked below is updated whois.conf
generated by yc_whoisgen
whois.conf (plain text, 07 Mar 2017) — copy to
/etc/whois.conf
as root
An excerpt from an example whois.conf
file showing the regular expression to match a domain on the left, and the WHOIS server where the lookup should be routed on the right side.
\.blue$ whois.afilias.net
\.moe$ whois.nic.moe
\.wtf$ whois.donuts.co
\.ninja$ whois.unitedtld.com
To get started looking up new gTLD domains, you can go ahead and grab the updated config that I've generated above and copy it to /etc/whois.conf
. You can also check out the IANA Root Zone Database, if you're still curious about TLDs, or the IANA Official list of TLDs.
Checking out the new whois.conf in vim