Guides

Whois example with php.

To make a whois query of a domain name using the php language, you can use the fsockopen, function, which allows you to open a socket connection on a specific portport 43 is the whois server port) as if you were using a file.

In the following example we use a map (extension -> server) stored in the vector $mappa_estensione_server which associates a specific domain extension with its whois server. Here are the whois servers for some gTLDs and ccTLDs .com,.net,.org,.info,.biz, but you only need to add a new pair to the map to handle a new extension.

whois.php

<?php
class whois_search {
  var $mappa_estensione_server = array (
      "it" => "whois.nic.it",
      "com" => "whois.internic.net",
      "net"  => "whois.internic.net",
      "org"  => "whois.publicinterestregistry.net",
      "info" => "whois.afilias.net",
      "biz"  => "whois.neulevel.biz",
      "eu"  => "whois.registry.eu",
      "name"  => "whois.nic.name",
      "mobi"  => "whois.dotmobiregistry.net",
      "us" => "whois.nic.us",
      "me" => "whois.meregistry.net",
      "tv" => "whois.nic.tv",
      "ws" => "whois.nic.ws",
      "cn" => "whois.cnnic.cn"
  );
  function do_whois($dominio) {
    $dominio = strtolower(trim($dominio));
    $pos_punto = strrpos($dominio, ".");
    if (!$pos_punto) {
      return "nome di dominio non valido";
    } else {
      $estensione = substr($dominio, $pos_punto + 1);
      if (!array_key_exists($estensione,$this->mappa_estensione_server)) {
        return "estensione <b><i>.".$estensione."</i></b> non supportata";
      }
    }
    $server = $this->mappa_estensione_server[$estensione];
    $puntatore_whois =  fsockopen($server, 43, $errno, $errstr, 30);
    $html_output = '';
    if (!$puntatore_whois) {
      $html_output = "$errstr ($errno)";
    } else {
       fputs($puntatore_whois, "$dominio\r\n");
       $html_output .= "<pre>\r\n";
       while (!feof($puntatore_whois)) {
         $html_output .= fread($puntatore_whois,128);
       }
      $html_output .= "</pre>";
       fclose ($puntatore_whois);
    }
    return $html_output;
  }
  function print_allowed_extension () {
    $vettore_estensioni = array_keys($this->mappa_estensione_server);
    $estensioni_supportate = '';
    for ($i = 0; $i < count($vettore_estensioni); $i++) {
      $estensioni_supportate .= '&nbsp;.'.$vettore_estensioni [$i].'&nbsp;';
    }
    return $estensioni_supportate;
  }
}
$whois = new whois_search();
$html_form =
  '<form method=post action="">
    Inserisci il nome di dominio: <input type="text" name="dominio" size="40">
    <br>
    <small>estensioni suppoortate: '.$whois->print_allowed_extension ().'</small>
    <br>
    <input type="submit" value="invio">&nbsp;&nbsp;<input type="reset" value="cancella">
  </form>';
if (isset($_POST["dominio"])) {
  $corpo_pagina = '<h2>Domain name Whois</h2>'.$html_form.'<hr>';
  $corpo_pagina  .= '<h2>Risultato Whois per il dominio : '.$_POST["dominio"].'</h2><br>';
  $corpo_pagina .= $whois->do_whois($_POST["dominio"]);
} else {
  $corpo_pagina = '<h2>Domain name Whois</h2>'.$html_form;
}
unset($whois);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<head>
<title>Ricerca Whois</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
<?=$corpo_pagina?>
</body>
</html>

The script is extremely simple. The central method is do_whois which, once it has found the correct whois server, opens a socket connection to it on port 43 using fsockopen. he open connection then waits for a domain name, which is sent using the fputs function. The result is read by the fgets unction up to the end-of-file character and returned as a string as the result of the do_whois method.

There is only one other method in the whois_search class, print_allowed_extension, which returns a string of valid domain extensions and which can be printed on the screen to guide the user.

This is of course only a basic example, but since the whois function is enclosed in a class, it is possible to extend the object according to one's needs by adding properties and methods, such as searching on name servers or handlers for .it domains.