How can I find the WHOIS server for any TLD?

18,018

Solution 1

There are several well-known ways of locating whois servers for TLDs, the IANA database is probably the closest to what the question asks for, however there are other sources that may be more useful in practice.

From IANA (access via whois and http)

Browse http://www.iana.org/domains/root/db or search the whois database at whois.iana.org for the TLD. Each entry has a field specifying the whois server.

Example:

$ whois -h whois.iana.org com
[Querying whois.iana.org]
[whois.iana.org]
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

domain:       COM

organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States

contact:      administrative
name:         Registry Customer Service
organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States
phone:        +1 703 925-6999
fax-no:       +1 703 948 3978
e-mail:       [email protected]

contact:      technical
name:         Registry Customer Service
organisation: VeriSign Global Registry Services
address:      12061 Bluemont Way
address:      Reston Virginia 20190
address:      United States
phone:        +1 703 925-6999
fax-no:       +1 703 948 3978
e-mail:       [email protected]

nserver:      A.GTLD-SERVERS.NET 192.5.6.30 2001:503:a83e:0:0:0:2:30
nserver:      B.GTLD-SERVERS.NET 192.33.14.30 2001:503:231d:0:0:0:2:30
nserver:      C.GTLD-SERVERS.NET 192.26.92.30
nserver:      D.GTLD-SERVERS.NET 192.31.80.30
nserver:      E.GTLD-SERVERS.NET 192.12.94.30
nserver:      F.GTLD-SERVERS.NET 192.35.51.30
nserver:      G.GTLD-SERVERS.NET 192.42.93.30
nserver:      H.GTLD-SERVERS.NET 192.54.112.30
nserver:      I.GTLD-SERVERS.NET 192.43.172.30
nserver:      J.GTLD-SERVERS.NET 192.48.79.30
nserver:      K.GTLD-SERVERS.NET 192.52.178.30
nserver:      L.GTLD-SERVERS.NET 192.41.162.30
nserver:      M.GTLD-SERVERS.NET 192.55.83.30
ds-rdata:     30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CFC41A5766

whois:        whois.verisign-grs.com

status:       ACTIVE
remarks:      Registration information: http://www.verisign-grs.com

created:      1985-01-01
changed:      2012-02-15
source:       IANA

$

From whois-servers.net (access via DNS)

The name tld.whois-servers.net is a CNAME to the appropriate whois-server. Somewhat unclear who actually maintains this but it seems pretty popular as it's very easy to use this with pretty much any whois client (and some clients default to using this service).

Example:

$ dig com.whois-servers.net +noall +answer

; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> com.whois-servers.net +noall +answer
;; global options: +cmd
com.whois-servers.net.  600     IN      CNAME   whois.verisign-grs.com.
whois.verisign-grs.com. 5       IN      A       199.7.55.74
$

From the registry itself (access via DNS)

Many registries publish the address of their whois server in DNS directly in the relevant zone as a _nicname._tcp SRV record.

Example:

$ dig _nicname._tcp.us SRV +noall +answer

; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> _nicname._tcp.us SRV +noall +answer
;; global options: +cmd
_nicname._tcp.us.       518344  IN      SRV     0 0 43 whois.nic.us.
$

Solution 2

I regularly compile a list from IANA and PSL into a XML file including whois server, registrar, second level domains and if possible a regular expression for availabilty: https://github.com/whois-server-list/whois-server-list

Solution 3

I've been playing around with WHOIS lately and I've found that some of the publicly-available whois packages [namely CentOS's jwhois] seem to rely on pre-packaged lists of TLD WHOIS servers. While this is going to be fine for the majority of TLDs it's a problem for the explosion of esoteric gTLDs like .horse.

The 100% reliable method is to look up the TLD at IANA's WHOIS server, whois.iana.org, parse out the whois: entry, and then query that server for the domain's information. Eg:

foo@bar:~ $ echo -e "horse\r\n" | nc -i 1 whois.iana.org 43
% IANA WHOIS server
% for more information on IANA, visit http://www.iana.org
% This query returned 1 object

domain:       HORSE

[snip]

whois:        whois-dub.mm-registry.com

[snip]

Connection closed by foreign host.

And then:

foo@bar:~ $ echo -e "dord.horse\r\n" | nc -i 1 whois-dub.mm-registry.com 43
Domain Name: dord.horse
Domain ID: 1742946-MMd1
WHOIS Server: whois-dub.mm-registry.com
[snip]

If you're using this method you should be polite and cache responses from the IANA server for at least 48 hours, if not longer, as they will rarely change and IANA's servers tend to be under massive load.

Solution 4

I maintain the list of WHOIS servers for my Ruby WHOIS library at https://github.com/weppos/whois/blob/master/data/tld.json

It contains the list of all existing servers.

It doesn't contain the response when the domain is available because the Ruby library performs parsing at a different level. Also, keep in mind not all registries uses string messages to communicate the unavailability of a domain.

Solution 5

you can use this script to get whois servers from IANA. chreated by noys. output in JSON list of zones and whois servers.

<style>
body {
    font: normal 10px verdana, sans-serif;
    color: #333;
}
</style>

<?
$zones = array('ac','am','asia','at','be','biz','biz.ua','biz.ua','br.com','bz','cc','ch','co','co.am','co.in','co.ua','co.ua','om','com.am','com.kz','com.ua','cx','cz','de.com','eu','eu.com','firm.in','fm','gen.in','im','in','ind.in','info','io','kiev.ua','kz','la','lc','li','lt','lu','md','me','mn','mobi','ms','mx','name','net','net.am','net.in','org','org.am','org.in','org.kz','ph','pl','pp.ua','pro','pw','pw','ru','ru.com','so','su','su','su','tel','tv','tw','us','uy.com','vc','ws','xxx','za.cm','xn--p1ai');

$count = count($zones);

echo '<h1>Whois tool</h1>';

echo '<pre>
{
';

for($i=0;$i<$count;$i++) {
    $root_server = 'whois.iana.org';
    $zone = $zones[$i];
    $domain = 'nuceti75.'.$zones[$i];
    //echo "<h2>$domain - $current_domain</h2>";
    $fp = fsockopen($root_server, 43);
    if (!$fp) echo "Connection error: $root_server \r\n";
    else { 
        fputs($fp, $zone."\r\n");
        while (!feof($fp)) {
            $root_answer .= fgets($fp, 128);
        }
        preg_match("~whois:\s(.+)~i", $root_answer, $result);
        $current_server = trim($result[1]);
        fclose($fp);
    } 

    //echo "<pre>$root_answer</pre>";
    //echo "<b>Whois server for this TLD:</b> $current_server";

    $fh = fsockopen($current_server, 43);
    if (!$fh) echo "Connection error: $current_server ($zone) \r\n";
    else { 
        fputs($fh, $domain."\r\n");
        while (!feof($fh)) {
            $current_answer .= fgets($fh, 128);
        }
        fclose($fh);
    }

    //echo "<pre>$current_answer</pre>";

    echo "\"$zone\": \"$current_server\",\r\n";

    unset($root_answer);
    unset($current_answer);
    unset($result);

}

echo '
}
</pre>';

?>
Share:
18,018

Related videos on Youtube

2hamed
Author by

2hamed

Go/Java/Kotlin/PHP

Updated on September 18, 2022

Comments

  • 2hamed
    2hamed almost 2 years

    I'm looking for a reliable and up-to-date list of WHOIS Servers to use in a whois script.
    Since the list changes frequently, it'd be nice if there were a resource I could refer to rather than having to update the script frequently.

    • Michael Hampton
      Michael Hampton almost 10 years
      Why not just use GNU jwhois? It handles this for you.
    • Zenexer
      Zenexer almost 6 years
      This deserves to be reopened, as there's really only one official source for this information.
  • cmbuckley
    cmbuckley about 7 years
    A number of the new TLDs are not set up; e.g. bet.whois-servers.net does not exist.
  • Patrick Mevzek
    Patrick Mevzek almost 6 years
    This feature depends on which whois client you use. Not all of them do that, for good or bad reason. whois-servers.net is still not an official service, just something done on a best effort case.