Skip to content

Instantly share code, notes, and snippets.

@kshitiz621
Created March 19, 2019 07:44
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save kshitiz621/558d1c7e39705bc63f55b28d1abdd801 to your computer and use it in GitHub Desktop.
Save kshitiz621/558d1c7e39705bc63f55b28d1abdd801 to your computer and use it in GitHub Desktop.
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>
@Mutale85
Copy link

This was so useful.
I added a bit of code just to get the expiring date of a domain.

Thank you for providing more info.

@kshitiz621
Copy link
Author

Nice job

@Mutale85
Copy link

It goes like this
`<?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);

		$prefix = "Registry Expiry Date:";
		$index = strpos($result, $prefix) + strlen($prefix);
		$exp = substr($result, $index);
		$expiry_date =  strtok($exp, " ");
		// $exp = preg_replace("#[^0-9 -]#", "-", $expiry_date);
		echo $expiry_date;
		echo "<br>";
		$date = str_replace("Registrar:","",$expiry_date);
		$date1 = str_replace("T"," ",$date);
		$date2 = str_replace("Z"," ",$date1);
		echo $date2;
		echo "<br>";
		echo date("j F, Y H:i:s", strtotime($date2));
	}
	else die("Invalid Input!");
	// echo "<pre>\n" . $result . "\n</pre>\n";
}

?>`

@salmanirani
Copy link

replace {0} to [0] in line 360

@anzz1
Copy link

anzz1 commented Aug 7, 2023

Thanks for this ! 👍
I made a slightly improved version: whois.php

@sunforcer
Copy link

sunforcer commented Apr 14, 2024

<?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, 8) == "https://") $domain = substr($domain, 8);
	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>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment