Location: PHPKode > scripts > Whois Lookup > whois-lookup/classes/class_Whois.php
<?PHP
/**
 * @category ServerTools
 * @package Whois
 * @author Peter Schmalfeldt <hide@address.com>
 * @link http://www.manifestinteractive.com
 */

/**
 * Begin Document
 */ 

class Whois {
	
	/**
     * fsockopen port
     *
     * @var    string
     * @access private
     */
	private $port = 43;
	
	/**
     * fsockopen Error Number
     *
     * @var    string
     * @access private
     */
	private $errno;
	
	/**
     * fsockopen Error String
     *
     * @var    string
     * @access private
     */
	private $errstr;
	
	/**
     * fsockopen Time Out
     *
     * @var    string
     * @access private
     */
	private $timeout = 10;
	
	/**
     * Selected Server from $whoisservers based on TLD from $domain
     *
     * @var    string
     * @access private
     */
	private $whoisserver;
	
	/**
     * Available Whois Servers
     *
     * @var    array
     * @access private
     */
	private $whoisservers = array(
		"ac" 	=> "whois.nic.ac",
		"ae" 	=> "whois.nic.ae",
		"aero"	=> "whois.aero",
		"af" 	=> "whois.nic.af",
		"ag" 	=> "whois.nic.ag",
		"al" 	=> "whois.ripe.net",
		"am" 	=> "whois.amnic.net",
		"arpa" 	=> "whois.iana.org",
		"as" 	=> "whois.nic.as",
		"asia" 	=> "whois.nic.asia",
		"at" 	=> "whois.nic.at",
		"au" 	=> "whois.aunic.net",
		"az" 	=> "whois.ripe.net",
		"ba" 	=> "whois.ripe.net",
		"be" 	=> "whois.dns.be",
		"bg" 	=> "whois.register.bg",
		"bi" 	=> "whois.nic.bi",
		"biz" 	=> "whois.biz",
		"bj" 	=> "whois.nic.bj",
		"br" 	=> "whois.registro.br",
		"bt" 	=> "whois.netnames.net",
		"by" 	=> "whois.ripe.net",
		"bz" 	=> "whois.belizenic.bz",
		"ca" 	=> "whois.cira.ca",
		"cat" 	=> "whois.cat",
		"cc" 	=> "whois.nic.cc",
		"cd" 	=> "whois.nic.cd",
		"ch" 	=> "whois.nic.ch",
		"ci" 	=> "whois.nic.ci",
		"ck" 	=> "whois.nic.ck",
		"cl" 	=> "whois.nic.cl",
		"cn" 	=> "whois.cnnic.net.cn",
		"com" 	=> "whois.verisign-grs.com",
		"coop" 	=> "whois.nic.coop",
		"cx" 	=> "whois.nic.cx",
		"cy" 	=> "whois.ripe.net",
		"cz" 	=> "whois.nic.cz",
		"de" 	=> "whois.denic.de",
		"dk" 	=> "whois.dk-hostmaster.dk",
		"dm" 	=> "whois.nic.cx",
		"dz" 	=> "whois.ripe.net",
		"edu" 	=> "whois.educause.edu",
		"ee" 	=> "whois.eenet.ee",
		"eg" 	=> "whois.ripe.net",
		"es" 	=> "whois.ripe.net",
		"eu" 	=> "whois.eu",
		"fi" 	=> "whois.ficora.fi",
		"fo" 	=> "whois.ripe.net",
		"fr" 	=> "whois.nic.fr",
		"gb" 	=> "whois.ripe.net",
		"gd" 	=> "whois.adamsnames.com",
		"ge" 	=> "whois.ripe.net",
		"gg" 	=> "whois.channelisles.net",
		"gi" 	=> "whois2.afilias-grs.net",
		"gl" 	=> "whois.ripe.net",
		"gm" 	=> "whois.ripe.net",
		"gov" 	=> "whois.nic.gov",
		"gr" 	=> "whois.ripe.net",
		"gs" 	=> "whois.nic.gs",
		"gw" 	=> "whois.nic.gw",
		"gy" 	=> "whois.registry.gy",
		"hk" 	=> "whois.hkirc.hk",
		"hm" 	=> "whois.registry.hm",
		"hn" 	=> "whois2.afilias-grs.net",
		"hr" 	=> "whois.ripe.net",
		"hu" 	=> "whois.nic.hu",
		"ie" 	=> "whois.domainregistry.ie",
		"il" 	=> "whois.isoc.org.il",
		"in" 	=> "whois.inregistry.net",
		"info" 	=> "whois.afilias.info",
		"int" 	=> "whois.iana.org",
		"io" 	=> "whois.nic.io",
		"iq" 	=> "vrx.net",
		"ir" 	=> "whois.nic.ir",
		"is" 	=> "whois.isnic.is",
		"it" 	=> "whois.nic.it",
		"je" 	=> "whois.channelisles.net",
		"jobs" 	=> "jobswhois.verisign-grs.com",
		"jp" 	=> "whois.jprs.jp",
		"ke" 	=> "whois.kenic.or.ke",
		"kg" 	=> "www.domain.kg",
		"ki" 	=> "whois.nic.ki",
		"kr" 	=> "whois.nic.or.kr",
		"kz" 	=> "whois.nic.kz",
		"la" 	=> "whois.nic.la",
		"li" 	=> "whois.nic.li",
		"lt" 	=> "whois.domreg.lt",
		"lu" 	=> "whois.dns.lu",
		"lv" 	=> "whois.nic.lv",
		"ly" 	=> "whois.nic.ly",
		"ma" 	=> "whois.iam.net.ma",
		"mc" 	=> "whois.ripe.net",
		"md" 	=> "whois.ripe.net",
		"me" 	=> "whois.meregistry.net",
		"mg" 	=> "whois.nic.mg",
		"mil" 	=> "whois.nic.mil",
		"mn" 	=> "whois.nic.mn",
		"mobi" 	=> "whois.dotmobiregistry.net",
		"ms" 	=> "whois.adamsnames.tc",
		"mt" 	=> "whois.ripe.net",
		"mu" 	=> "whois.nic.mu",
		"museum"=> "whois.museum",
		"mx" 	=> "whois.nic.mx",
		"my" 	=> "whois.mynic.net.my",
		"na" 	=> "whois.na-nic.com.na",
		"name" 	=> "whois.nic.name",
		"net" 	=> "whois.verisign-grs.net",
		"nf" 	=> "whois.nic.nf",
		"nl" 	=> "whois.domain-registry.nl",
		"no" 	=> "whois.norid.no",
		"nu" 	=> "whois.nic.nu",
		"nz" 	=> "whois.srs.net.nz",
		"org" 	=> "whois.pir.org",
		"pl" 	=> "whois.dns.pl",
		"pm" 	=> "whois.nic.pm",
		"pr" 	=> "whois.uprr.pr",
		"pro" 	=> "whois.registrypro.pro",
		"pt" 	=> "whois.dns.pt",
		"re" 	=> "whois.nic.re",
		"ro" 	=> "whois.rotld.ro",
		"ru" 	=> "whois.ripn.net",
		"sa" 	=> "whois.nic.net.sa",
		"sb" 	=> "whois.nic.net.sb",
		"sc" 	=> "whois2.afilias-grs.net",
		"se" 	=> "whois.iis.se",
		"sg" 	=> "whois.nic.net.sg",
		"sh" 	=> "whois.nic.sh",
		"si" 	=> "whois.arnes.si",
		"sk" 	=> "whois.ripe.net",
		"sm" 	=> "whois.ripe.net",
		"st" 	=> "whois.nic.st",
		"su" 	=> "whois.ripn.net",
		"tc" 	=> "whois.adamsnames.tc",
		"tel" 	=> "whois.nic.tel",
		"tf" 	=> "whois.nic.tf",
		"th" 	=> "whois.thnic.net",
		"tj" 	=> "whois.nic.tj",
		"tk" 	=> "whois.dot.tk",
		"tl" 	=> "whois.nic.tl",
		"tm" 	=> "whois.nic.tm",
		"tn" 	=> "whois.ripe.net",
		"to" 	=> "whois.tonic.to",
		"tp" 	=> "whois.nic.tl",
		"tr" 	=> "whois.nic.tr",
		"travel"=> "whois.nic.travel",
		"tv" 	=> "tvwhois.verisign-grs.com",
		"tw" 	=> "whois.twnic.net.tw",
		"ua" 	=> "whois.net.ua",
		"ug" 	=> "whois.co.ug",
		"uk" 	=> "whois.nic.uk",
		"us" 	=> "whois.nic.us",
		"uy" 	=> "nic.uy",
		"uz" 	=> "whois.cctld.uz",
		"va" 	=> "whois.ripe.net",
		"vc" 	=> "whois2.afilias-grs.net",
		"ve" 	=> "whois.nic.ve",
		"vg" 	=> "whois.adamsnames.tc",
		"wf" 	=> "whois.nic.wf",
		"ws" 	=> "whois.website.ws",
		"yt" 	=> "whois.nic.yt",
		"yu" 	=> "whois.ripe.net"
	);
		
	/**
     * Domain Name (URL or IP Address)
     *
     * @var    string
     * @access public
     */
	public $domain;
	
	/**
     * Full URL
     *
     * @var    string
     * @access public
     */
	public $url;
	
	/**
     * Domain Array containing Domain and TLD
     *
     * @var    array
     * @access public
     */
	public $domainarray;
	
	/**
     * Returned Whois Text
     *
     * @var    string
     * @access public
     */
	public $data;
	
	/**
     * Constructor
	 *
	 * Create Google Translate Object and Convert $string
	 * <code>
	 * <?php
	 * $whois = new Whois("example.com");
	 * echo $whois->domain;					// 'example.com'
	 * echo $whois->url; 					// 'http://example.com'
	 * echo $whois->domainarray[0];			// 'com'
	 * echo $whois->domainarray[1];			// 'example'
	 * echo $whois->data; 					// [ ... whois data ... ] 
	 *
	 * $whoisFull = new Whois("http://www.example.com");
	 * echo $whoisFull->domain;				// 'example.com'
	 * echo $whoisFull->url; 				// 'http://www.example.com'
	 * echo $whoisFull->domainarray[0];		// 'com'
	 * echo $whoisFull->domainarray[1];		// 'example'
	 * echo $whoisFull->data; 				// [ ... whois data ... ] 
	 *
	 * $whoisIP = new Whois("123.45.678.90");
	 * echo $whoisIP->domain;				// '123.45.678.90'
	 * echo $whoisIP->url; 					// 'http://123.45.678.90'
	 * echo $whoisIP->domainarray[0];		// NULL
	 * echo $whoisIP->domainarray[1];		// NULL
	 * echo $whoisIP->data; 				// [ ... whois data ... ] 
	 * ?>
 	 * </code>
     *
     * @param 	string $domain URL or IP Address
     * @access 	public
     */
	
	function __construct($domain){
		
		$this->domain = $domain;
		$this->domain = rtrim($this->domain, "/");
		$this->domain = preg_replace('/http:\/\//', '', $this->domain);
		
		$this->url = (substr($this->domain,0,7) != 'http://') ? 'http://'.$this->domain:$this->domain;
		
		if(!preg_match('/(\d+).(\d+).(\d+).(\d+)/', $this->domain)){
			$this->domainarray = split("\.", $this->domain);
			$this->domainarray = array_reverse($this->domainarray);
			$this->domain = $this->domainarray[1].'.'.$this->domainarray[0];
		}
		
		if(strlen($this->domain)>0){
			foreach($this->whoisservers as $tld=>$server) {
				if(substr($this->domain, -strlen($tld)) == $tld) {
					$this->whoisserver = $server;
					break;
				}
			}
			if(!$this->whoisserver){
				if(preg_match('/(\d+).(\d+).(\d+).(\d+)/', $this->domain)) $this->whoisserver = "whois.arin.net";
				else $this->data = "Error: No appropriate Whois server found for {$this->domain} domain!";
			}
			
			if($result = $this->queryServer()) {
				preg_match("/Whois Server: (.*)/", $result, $matches);
				$secondary = $matches[1];
				if($secondary) {
					$this->whoisserver = $secondary;
					$result = $this->queryServer();
				}
				$this->data = $result;
			}
			else {
				$this->data = "Error: No results retrieved from $whoisserver server for {$this->domain} domain!";
			}
		}
	}
	
	/**
     * Query Selected Whois Server
     *
     * @access private
     */
	private function queryServer(){
		$out = "";
		$fp = @fsockopen($this->whoisserver, $this->port, $this->errno, $this->errstr, $this->timeout);
		fputs($fp, $this->domain . "\r\n");
		while(!feof($fp)) $out .= fgets($fp);
		fclose($fp);
		if(strlen($out)>0) return $out;
		else return false;
	}
}
?>
Return current item: Whois Lookup