Esempio di Whois con php
Per effettuare un'interrogazione whois di un nome a dominio usando il linguaggio php, si può utilizzare la funzione fsockopen, che consente di aprire una connessione socket su una porta specifica (la porta 43 è quella dei server whois) come se si utilizzasse un file.
Nell'esempio seguente si utilizza una mappa (estensione -> server) memorizzata nel vettore $mappa_estensione_server che associa ad una specifica estensione di dominio il relativo whois server. Qui sono riportati i whois server per alcuni gTLD e ccTLD, in particolare .com,.net,.org,.info,.biz, ma è sufficiente aggiungere una nuova coppia alla mappa per gestire una nuova estensione.
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 .= ' .'.$vettore_estensioni [$i].' '; } 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"> <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>
Lo script è estremamente semplice. Il metodo centrale è do_whois che, una volta individuato il corretto server whois, apre verso di esso una connessione socket sulla porta 43 tramite fsockopen. La connessione aperta attende, quindi, un nome a dominio che viene inviato tramite la funzione fputs. Il risultato viene letto tramite la funzione fgets fino al carattere di fine file e restituito sotto forma di stringa come risultato del metodo do_whois.
Nella classe whois_search è presente un solo altro metodo, print_allowed_extension, che restituisce una stringa con le estensioni a dominio valide e che può essere stampata a video per guidare l'utente.
Naturalmente questo è solo un esempio di base ma, poiché la funzione whois è incapsulata in una classe, è possibile estendere l'oggetto secondo le proprie necessità, aggiungendo proprietà e metodi, come ad esempio la ricerca sui name server o sugli handler per i domini .it.