Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
PHP code to get WHOIS information of a domain
<?php
/*************************************************************************
php easy :: whois lookup script
==========================================================================
Author: php easy code, www.phpeasycode.com
Web Site: http://www.phpeasycode.com
Contact: webmaster@phpeasycode.com
*************************************************************************/
$domain = $_GET['domain'];
// For the full list of TLDs/Whois servers see http://www.iana.org/domains/root/db/ and http://www.whois365.com/en/listtld/
$whoisservers = array(
"ac" => "whois.nic.ac", // Ascension Island
// ad - Andorra - no whois server assigned
"ae" => "whois.nic.ae", // United Arab Emirates
"aero"=>"whois.aero",
"af" => "whois.nic.af", // Afghanistan
"ag" => "whois.nic.ag", // Antigua And Barbuda
"ai" => "whois.ai", // Anguilla
"al" => "whois.ripe.net", // Albania
"am" => "whois.amnic.net", // Armenia
// an - Netherlands Antilles - no whois server assigned
// ao - Angola - no whois server assigned
// aq - Antarctica (New Zealand) - no whois server assigned
// ar - Argentina - no whois server assigned
"arpa" => "whois.iana.org",
"as" => "whois.nic.as", // American Samoa
"asia" => "whois.nic.asia",
"at" => "whois.nic.at", // Austria
"au" => "whois.aunic.net", // Australia
// aw - Aruba - no whois server assigned
"ax" => "whois.ax", // Aland Islands
"az" => "whois.ripe.net", // Azerbaijan
// ba - Bosnia And Herzegovina - no whois server assigned
// bb - Barbados - no whois server assigned
// bd - Bangladesh - no whois server assigned
"be" => "whois.dns.be", // Belgium
"bg" => "whois.register.bg", // Bulgaria
"bi" => "whois.nic.bi", // Burundi
"biz" => "whois.biz",
"bj" => "whois.nic.bj", // Benin
// bm - Bermuda - no whois server assigned
"bn" => "whois.bn", // Brunei Darussalam
"bo" => "whois.nic.bo", // Bolivia
"br" => "whois.registro.br", // Brazil
"bt" => "whois.netnames.net", // Bhutan
// bv - Bouvet Island (Norway) - no whois server assigned
// bw - Botswana - no whois server assigned
"by" => "whois.cctld.by", // Belarus
"bz" => "whois.belizenic.bz", // Belize
"ca" => "whois.cira.ca", // Canada
"cat" => "whois.cat", // Spain
"cc" => "whois.nic.cc", // Cocos (Keeling) Islands
"cd" => "whois.nic.cd", // Congo, The Democratic Republic Of The
// cf - Central African Republic - no whois server assigned
"ch" => "whois.nic.ch", // Switzerland
"ci" => "whois.nic.ci", // Cote d'Ivoire
"ck" => "whois.nic.ck", // Cook Islands
"cl" => "whois.nic.cl", // Chile
// cm - Cameroon - no whois server assigned
"cn" => "whois.cnnic.net.cn", // China
"co" => "whois.nic.co", // Colombia
"com" => "whois.verisign-grs.com",
"coop" => "whois.nic.coop",
// cr - Costa Rica - no whois server assigned
// cu - Cuba - no whois server assigned
// cv - Cape Verde - no whois server assigned
// cw - Curacao - no whois server assigned
"cx" => "whois.nic.cx", // Christmas Island
// cy - Cyprus - no whois server assigned
"cz" => "whois.nic.cz", // Czech Republic
"de" => "whois.denic.de", // Germany
// dj - Djibouti - no whois server assigned
"dk" => "whois.dk-hostmaster.dk", // Denmark
"dm" => "whois.nic.dm", // Dominica
// do - Dominican Republic - no whois server assigned
"dz" => "whois.nic.dz", // Algeria
"ec" => "whois.nic.ec", // Ecuador
"edu" => "whois.educause.edu",
"ee" => "whois.eenet.ee", // Estonia
"eg" => "whois.ripe.net", // Egypt
// er - Eritrea - no whois server assigned
"es" => "whois.nic.es", // Spain
// et - Ethiopia - no whois server assigned
"eu" => "whois.eu",
"fi" => "whois.ficora.fi", // Finland
// fj - Fiji - no whois server assigned
// fk - Falkland Islands - no whois server assigned
// fm - Micronesia, Federated States Of - no whois server assigned
"fo" => "whois.nic.fo", // Faroe Islands
"fr" => "whois.nic.fr", // France
// ga - Gabon - no whois server assigned
"gd" => "whois.nic.gd", // Grenada
// ge - Georgia - no whois server assigned
// gf - French Guiana - no whois server assigned
"gg" => "whois.gg", // Guernsey
// gh - Ghana - no whois server assigned
"gi" => "whois2.afilias-grs.net", // Gibraltar
"gl" => "whois.nic.gl", // Greenland (Denmark)
// gm - Gambia - no whois server assigned
// gn - Guinea - no whois server assigned
"gov" => "whois.nic.gov",
// gr - Greece - no whois server assigned
// gt - Guatemala - no whois server assigned
"gs" => "whois.nic.gs", // South Georgia And The South Sandwich Islands
// gu - Guam - no whois server assigned
// gw - Guinea-bissau - no whois server assigned
"gy" => "whois.registry.gy", // Guyana
"hk" => "whois.hkirc.hk", // Hong Kong
// hm - Heard and McDonald Islands (Australia) - no whois server assigned
"hn" => "whois.nic.hn", // Honduras
"hr" => "whois.dns.hr", // Croatia
"ht" => "whois.nic.ht", // Haiti
"hu" => "whois.nic.hu", // Hungary
// id - Indonesia - no whois server assigned
"ie" => "whois.domainregistry.ie", // Ireland
"il" => "whois.isoc.org.il", // Israel
"im" => "whois.nic.im", // Isle of Man
"in" => "whois.inregistry.net", // India
"info" => "whois.afilias.net",
"int" => "whois.iana.org",
"io" => "whois.nic.io", // British Indian Ocean Territory
"iq" => "whois.cmc.iq", // Iraq
"ir" => "whois.nic.ir", // Iran, Islamic Republic Of
"is" => "whois.isnic.is", // Iceland
"it" => "whois.nic.it", // Italy
"je" => "whois.je", // Jersey
// jm - Jamaica - no whois server assigned
// jo - Jordan - no whois server assigned
"jobs" => "jobswhois.verisign-grs.com",
"jp" => "whois.jprs.jp", // Japan
"ke" => "whois.kenic.or.ke", // Kenya
"kg" => "www.domain.kg", // Kyrgyzstan
// kh - Cambodia - no whois server assigned
"ki" => "whois.nic.ki", // Kiribati
// km - Comoros - no whois server assigned
// kn - Saint Kitts And Nevis - no whois server assigned
// kp - Korea, Democratic People's Republic Of - no whois server assigned
"kr" => "whois.kr", // Korea, Republic Of
// kw - Kuwait - no whois server assigned
// ky - Cayman Islands - no whois server assigned
"kz" => "whois.nic.kz", // Kazakhstan
"la" => "whois.nic.la", // Lao People's Democratic Republic
// lb - Lebanon - no whois server assigned
// lc - Saint Lucia - no whois server assigned
"li" => "whois.nic.li", // Liechtenstein
// lk - Sri Lanka - no whois server assigned
"lt" => "whois.domreg.lt", // Lithuania
"lu" => "whois.dns.lu", // Luxembourg
"lv" => "whois.nic.lv", // Latvia
"ly" => "whois.nic.ly", // Libya
"ma" => "whois.iam.net.ma", // Morocco
// mc - Monaco - no whois server assigned
"md" => "whois.nic.md", // Moldova
"me" => "whois.nic.me", // Montenegro
"mg" => "whois.nic.mg", // Madagascar
// mh - Marshall Islands - no whois server assigned
"mil" => "whois.nic.mil",
// mk - Macedonia, The Former Yugoslav Republic Of - no whois server assigned
"ml" => "whois.dot.ml", // Mali
// mm - Myanmar - no whois server assigned
"mn" => "whois.nic.mn", // Mongolia
"mo" => "whois.monic.mo", // Macao
"mobi" => "whois.dotmobiregistry.net",
"mp" => "whois.nic.mp", // Northern Mariana Islands
// mq - Martinique (France) - no whois server assigned
// mr - Mauritania - no whois server assigned
"ms" => "whois.nic.ms", // Montserrat
// mt - Malta - no whois server assigned
"mu" => "whois.nic.mu", // Mauritius
"museum" => "whois.museum",
// mv - Maldives - no whois server assigned
// mw - Malawi - no whois server assigned
"mx" => "whois.mx", // Mexico
"my" => "whois.domainregistry.my", // Malaysia
// mz - Mozambique - no whois server assigned
"na" => "whois.na-nic.com.na", // Namibia
"name" => "whois.nic.name",
"nc" => "whois.nc", // New Caledonia
// ne - Niger - no whois server assigned
"net" => "whois.verisign-grs.net",
"nf" => "whois.nic.nf", // Norfolk Island
"ng" => "whois.nic.net.ng", // Nigeria
// ni - Nicaragua - no whois server assigned
"nl" => "whois.domain-registry.nl", // Netherlands
"no" => "whois.norid.no", // Norway
// np - Nepal - no whois server assigned
// nr - Nauru - no whois server assigned
"nu" => "whois.nic.nu", // Niue
"nz" => "whois.srs.net.nz", // New Zealand
"om" => "whois.registry.om", // Oman
"org" => "whois.pir.org",
// pa - Panama - no whois server assigned
"pe" => "kero.yachay.pe", // Peru
"pf" => "whois.registry.pf", // French Polynesia
// pg - Papua New Guinea - no whois server assigned
// ph - Philippines - no whois server assigned
// pk - Pakistan - no whois server assigned
"pl" => "whois.dns.pl", // Poland
"pm" => "whois.nic.pm", // Saint Pierre and Miquelon (France)
// pn - Pitcairn (New Zealand) - no whois server assigned
"post" => "whois.dotpostregistry.net",
"pr" => "whois.nic.pr", // Puerto Rico
"pro" => "whois.dotproregistry.net",
// ps - Palestine, State of - no whois server assigned
"pt" => "whois.dns.pt", // Portugal
"pw" => "whois.nic.pw", // Palau
// py - Paraguay - no whois server assigned
"qa" => "whois.registry.qa", // Qatar
"re" => "whois.nic.re", // Reunion (France)
"ro" => "whois.rotld.ro", // Romania
"rs" => "whois.rnids.rs", // Serbia
"ru" => "whois.tcinet.ru", // Russian Federation
// rw - Rwanda - no whois server assigned
"sa" => "whois.nic.net.sa", // Saudi Arabia
"sb" => "whois.nic.net.sb", // Solomon Islands
"sc" => "whois2.afilias-grs.net", // Seychelles
// sd - Sudan - no whois server assigned
"se" => "whois.iis.se", // Sweden
"sg" => "whois.sgnic.sg", // Singapore
"sh" => "whois.nic.sh", // Saint Helena
"si" => "whois.arnes.si", // Slovenia
"sk" => "whois.sk-nic.sk", // Slovakia
// sl - Sierra Leone - no whois server assigned
"sm" => "whois.nic.sm", // San Marino
"sn" => "whois.nic.sn", // Senegal
"so" => "whois.nic.so", // Somalia
// sr - Suriname - no whois server assigned
"st" => "whois.nic.st", // Sao Tome And Principe
"su" => "whois.tcinet.ru", // Russian Federation
// sv - El Salvador - no whois server assigned
"sx" => "whois.sx", // Sint Maarten (dutch Part)
"sy" => "whois.tld.sy", // Syrian Arab Republic
// sz - Swaziland - no whois server assigned
"tc" => "whois.meridiantld.net", // Turks And Caicos Islands
// td - Chad - no whois server assigned
"tel" => "whois.nic.tel",
"tf" => "whois.nic.tf", // French Southern Territories
// tg - Togo - no whois server assigned
"th" => "whois.thnic.co.th", // Thailand
"tj" => "whois.nic.tj", // Tajikistan
"tk" => "whois.dot.tk", // Tokelau
"tl" => "whois.nic.tl", // Timor-leste
"tm" => "whois.nic.tm", // Turkmenistan
"tn" => "whois.ati.tn", // Tunisia
"to" => "whois.tonic.to", // Tonga
"tp" => "whois.nic.tl", // Timor-leste
"tr" => "whois.nic.tr", // Turkey
"travel" => "whois.nic.travel",
// tt - Trinidad And Tobago - no whois server assigned
"tv" => "tvwhois.verisign-grs.com", // Tuvalu
"tw" => "whois.twnic.net.tw", // Taiwan
"tz" => "whois.tznic.or.tz", // Tanzania, United Republic Of
"ua" => "whois.ua", // Ukraine
"ug" => "whois.co.ug", // Uganda
"uk" => "whois.nic.uk", // United Kingdom
"us" => "whois.nic.us", // United States
"uy" => "whois.nic.org.uy", // Uruguay
"uz" => "whois.cctld.uz", // Uzbekistan
// va - Holy See (vatican City State) - no whois server assigned
"vc" => "whois2.afilias-grs.net", // Saint Vincent And The Grenadines
"ve" => "whois.nic.ve", // Venezuela
"vg" => "whois.adamsnames.tc", // Virgin Islands, British
// vi - Virgin Islands, US - no whois server assigned
// vn - Viet Nam - no whois server assigned
// vu - Vanuatu - no whois server assigned
"wf" => "whois.nic.wf", // Wallis and Futuna
"ws" => "whois.website.ws", // Samoa
"xxx" => "whois.nic.xxx",
// ye - Yemen - no whois server assigned
"yt" => "whois.nic.yt", // Mayotte
"yu" => "whois.ripe.net");
function LookupDomain($domain){
global $whoisservers;
$domain_parts = explode(".", $domain);
$tld = strtolower(array_pop($domain_parts));
$whoisserver = $whoisservers[$tld];
if(!$whoisserver) {
return "Error: No appropriate Whois server found for $domain domain!";
}
$result = QueryWhoisServer($whoisserver, $domain);
if(!$result) {
return "Error: No results retrieved from $whoisserver server for $domain domain!";
}
else {
while(strpos($result, "Whois Server:") !== FALSE){
preg_match("/Whois Server: (.*)/", $result, $matches);
$secondary = $matches[1];
if($secondary) {
$result = QueryWhoisServer($secondary, $domain);
$whoisserver = $secondary;
}
}
}
return "$domain domain lookup results from $whoisserver server:\n\n" . $result;
}
function LookupIP($ip) {
$whoisservers = array(
//"whois.afrinic.net", // Africa - returns timeout error :-(
"whois.lacnic.net", // Latin America and Caribbean - returns data for ALL locations worldwide :-)
"whois.apnic.net", // Asia/Pacific only
"whois.arin.net", // North America only
"whois.ripe.net" // Europe, Middle East and Central Asia only
);
$results = array();
foreach($whoisservers as $whoisserver) {
$result = QueryWhoisServer($whoisserver, $ip);
if($result && !in_array($result, $results)) {
$results[$whoisserver]= $result;
}
}
$res = "RESULTS FOUND: " . count($results);
foreach($results as $whoisserver=>$result) {
$res .= "\n\n-------------\nLookup results for " . $ip . " from " . $whoisserver . " server:\n\n" . $result;
}
return $res;
}
function ValidateIP($ip) {
$ipnums = explode(".", $ip);
if(count($ipnums) != 4) {
return false;
}
foreach($ipnums as $ipnum) {
if(!is_numeric($ipnum) || ($ipnum > 255)) {
return false;
}
}
return $ip;
}
function ValidateDomain($domain) {
if(!preg_match("/^([-a-z0-9]{2,100})\.([a-z\.]{2,8})$/i", $domain)) {
return false;
}
return $domain;
}
function QueryWhoisServer($whoisserver, $domain) {
$port = 43;
$timeout = 10;
$fp = @fsockopen($whoisserver, $port, $errno, $errstr, $timeout) or die("Socket Error " . $errno . " - " . $errstr);
//if($whoisserver == "whois.verisign-grs.com") $domain = "=".$domain; // whois.verisign-grs.com requires the equals sign ("=") or it returns any result containing the searched string.
fputs($fp, $domain . "\r\n");
$out = "";
while(!feof($fp)){
$out .= fgets($fp);
}
fclose($fp);
$res = "";
if((strpos(strtolower($out), "error") === FALSE) && (strpos(strtolower($out), "not allocated") === FALSE)) {
$rows = explode("\n", $out);
foreach($rows as $row) {
$row = trim($row);
if(($row != '') && ($row{0} != '#') && ($row{0} != '%')) {
$res .= $row."\n";
}
}
}
return $res;
}
?>
<html>
<head>
<title>Whois Lookup Script</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="<?=$_SERVER['PHP_SELF'];?>">
<p><b><label for="domain">Domain/IP Address:</label></b> <input type="text" name="domain" id="domain" value="<?=$domain;?>"> <input type="submit" value="Lookup"></p>
</form>
<?php
if($domain) {
$domain = trim($domain);
if(substr(strtolower($domain), 0, 7) == "http://") $domain = substr($domain, 7);
if(substr(strtolower($domain), 0, 4) == "www.") $domain = substr($domain, 4);
if(ValidateIP($domain)) {
echo "hello before check";
$result = LookupIP($domain);
}
elseif(ValidateDomain($domain)) {
$result = LookupDomain($domain);
}
else die("Invalid Input!");
echo "<pre>\n" . $result . "\n</pre>\n";
}
?>
</body>
</html>
@winelist

This comment has been minimized.

Copy link

winelist commented Feb 22, 2018

A couple of items, to make script a bit more complete
A: The NEW gTLD's are upto 24 characters in length, regex is limited to 8 chars
B: z.com errors out since the regex script requires at 2 chars
C: Max length of a domain is 63 chars and the regex has a max length of 100.
ANSWER: "/^([-a-z0-9]{2,100}).([a-z.]{2,8})$/i" replace the {} with the following {1,63} and {2,24}

Error first time loading the script, I found isset a good answer, other way's probably work too.
$domain = $_GET['domain'];
ANSWER: $domain = isset($_GET['domain']) ? $_GET['domain'] : '';

Add a few new gTLD's: (it is easy, to test longer TLD's)
"domains" => "whois.donuts.co", // donuts registry
"tips" => "whois.donuts.co", // donuts registry
"blog" => "whois.nic.blog", // wordpress registry
"accountants" => "whois.donuts.co", // donuts registry

@calabresem

This comment has been minimized.

Copy link

calabresem commented Jun 29, 2018

Thanks for the code!

Let me add a couple of corrections I had to make:

  • <form action="<?php echo $_SERVER['PHP_SELF']; ?>">
  • <input type="text" name="domain" id="domain" value="<?php echo $domain; ?>">

And the new whois server for Argentina:

  • "ar" => "whois.nic.ar",
@moneycodedotng

This comment has been minimized.

Copy link

moneycodedotng commented Oct 13, 2018

Thanks for this code.
2 questions.

  1. How does one integrate this into a WordPress page?

  2. How do you change the "object not found" text on some servers to "domain not yet registered" and add a link for registration of that domain name to the output?

@netwons

This comment has been minimized.

Copy link

netwons commented Nov 25, 2018

Learn this package

@nigsun

This comment has been minimized.

Copy link

nigsun commented Dec 31, 2018

This is a very nice code if you update validateIP function to the following it will search ipv4 and ipv6 addresses

     function ValidateIP($ip) {
       $packed = inet_pton ($ip);
       if (FALSE == $packed || FALSE === inet_ntop ($packed)) {
          return FALSE;
          }
       return $ip;
       }
@1906sam

This comment has been minimized.

Copy link

1906sam commented Feb 6, 2019

This is a very nice code if you update validateIP function to the following it will search ipv4 and ipv6 addresses

     function ValidateIP($ip) {
       $packed = inet_pton ($ip);
       if (FALSE == $packed || FALSE === inet_ntop ($packed)) {
          return FALSE;
          }
       return $ip;
       }

Thanks bro!

@doctorhoster

This comment has been minimized.

Copy link

doctorhoster commented Feb 16, 2019

To check domains with multi-dot tld
Please change LookupDomain()
two level tld

Change code to

$tld = "";
if(count($domain_parts) > 2){
$totalTldIndexes = count($domain_parts) - 1;
for($i = 1; $i <= $totalTldIndexes; $i++){
$tld .= '.' . $domain_parts[$i];
}
$tld = ltrim($tld, '.');
}
else{
$tld = strtolower(array_pop($domain_parts));
}

@sijanec

This comment has been minimized.

Copy link

sijanec commented Sep 28, 2019

you could just use tld.whois-servers.net instead of the long whois servers array.
whois-servers.net at dns level returns CNAME of the whois server.

@arjungongley

This comment has been minimized.

Copy link

arjungongley commented Nov 16, 2019

technoarray.com domain lookup results from whois.verisign-grs.com server:

Domain Name: TECHNOARRAY.COM
Registry Domain ID: 1837014171_DOMAIN_COM-VRSN
Registrar WHOIS Server: Whois.bigrock.com
Registrar URL: http://www.bigrock.com
Updated Date: 2018-11-27T10:16:18Z
Creation Date: 2013-11-27T05:49:49Z
Registry Expiry Date: 2019-11-27T05:49:49Z
Registrar: BigRock Solutions Ltd
Registrar IANA ID: 1495
Registrar Abuse Contact Email: abuse-contact@publicdomainregistry.com
Registrar Abuse Contact Phone: +1.2013775952
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Name Server: NS8121.HOSTGATOR.COM
Name Server: NS8122.HOSTGATOR.COM
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/

Last update of whois database: 2019-11-16T04:43:38Z <<<
For more information on Whois status codes, please visit https://icann.org/epp
NOTICE: The expiration date displayed in this record is the date the
registrar's sponsorship of the domain name registration in the registry is
currently set to expire. This date does not necessarily reflect the expiration
date of the domain name registrant's agreement with the sponsoring
registrar. Users may consult the sponsoring registrar's Whois database to
view the registrar's reported date of expiration for this registration.
TERMS OF USE: You are not authorized to access or query our Whois
database through the use of electronic processes that are high-volume and
automated except as reasonably necessary to register domain names or
modify existing registrations; the Data in VeriSign Global Registry
Services' ("VeriSign") Whois database is provided by VeriSign for
information purposes only, and to assist persons in obtaining information
about or related to a domain name registration record. VeriSign does not
guarantee its accuracy. By submitting a Whois query, you agree to abide
by the following terms of use: You agree that you may use this Data only
for lawful purposes and that under no circumstances will you use this Data
to: (1) allow, enable, or otherwise support the transmission of mass
unsolicited, commercial advertising or solicitations via e-mail, telephone,
or facsimile; or (2) enable high volume, automated, electronic processes
that apply to VeriSign (or its computer systems). The compilation,
repackaging, dissemination or other use of this Data is expressly
prohibited without the prior written consent of VeriSign. You agree not to
use electronic processes that are automated and high-volume to access or
query the Whois database except as reasonably necessary to register
domain names or modify existing registrations. VeriSign reserves the right
to restrict your access to the Whois database in its sole discretion to ensure
operational stability. VeriSign may restrict or terminate your access to the
Whois database for failure to abide by these terms of use. VeriSign
reserves the right to modify these terms at any time.
The Registry database contains ONLY .COM, .NET, .EDU domains and
Registrars.

how to get only Name Server Details from whole result?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.