Publié le 14/04/2016
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
2 plus
0 commentaires

Charger le Whois d'un nom de domaine

Le Whois permet notamment d'identifier le propriétaire et l'hébergeur d'une site internet. Ces fiches de renseignements sont maintenues à jour pour chaque site web, voyons comment récupérer le contenu à l'aide d'un script PHP.

Quel registrar interroger ?

Un nom de domaine d'un site internet se compose d'un nom suivi d'une extension que l'on appelle aussi TLD (Top-Level Domain). A ce jour, il existe un foule d'extension possible pour ne citer que les plus connues: .com, .org, .net, .fr.
Ainsi pour charger le Whois d'un site internet, la première étape consiste à contacter le registrar en charge d'une extension et de lui transmettre notre requête sur le nom de domaine. Un tableau de correspondance entre le TLD et le l'organisme en charge de l'extension peut être constitué comme suit:

$servers = array(
"biz" => "whois.neulevel.biz",
"com" => "whois.internic.net",
"us" => "whois.nic.us",
"info" => "whois.nic.info",
"name" => "whois.nic.name",
"net" => "whois.internic.net",
"gov" => "whois.nic.gov",
"edu" => "whois.internic.net",
"int" => "whois.iana.org",
"ac" => "whois.nic.ac",
"ae" => "whois.uaenic.ae",
"at" => "whois.ripe.net",
"au" => "whois.aunic.net",
"be" => "whois.dns.be",
"bg" => "whois.ripe.net",
"br" => "whois.registro.br",
"bz" => "whois.belizenic.bz",
"ca" => "whois.cira.ca",
"cc" => "whois.nic.cc",
"ch" => "whois.nic.ch",
"cl" => "whois.nic.cl",
"cn" => "whois.cnnic.net.cn",
"cz" => "whois.nic.cz",
"de" => "whois.nic.de",
"fr" => "whois.nic.fr",
"hu" => "whois.nic.hu",
"ie" => "whois.domainregistry.ie",
"il" => "whois.isoc.org.il",
"in" => "whois.ncst.ernet.in",
"ir" => "whois.nic.ir",
"mc" => "whois.ripe.net",
..............

Premièrement, le tableau est quand même assez long et devra être déplacé dans un script PHP nommée constante. Et deuxièmement, cette solution est difficile à maintenir car de nouvelle extension sont ajoutées régulièrement.

Comment interroger le whois d'un domaine

Au lieu de maintenir un tableau de correspondance, nous allons demander à l'iana (Internet Assigned Numbers Authority) de nous indiquer le registrar en charger du TLD. Avec cette information, il suffit d'ouvrir un socket, de questionner le serveur de Whois puis de récupérer les informations sur le site internet.

<?php
/**
 * Charger le Whois d'un nom de domaine
 * http://www.fobec.com/php5/1174/charger-whois-nom-domaine.html
 * @author Fobec avril 2016
 */
 
class Whois_DomainName {
 
    //5 secondes
    const TIMEOUT_REQUEST = 5;
    //Dernière erreur
    public static $last_error = '';
 
    /**
     * Charger le Whois d'un nom de domaine
     * @param type $domain_name
     * @return boolean
     */
    public static function query($domain_name) {
        //Rechercher le server de Whois à  interroger
        $whois_buf = self::query_server('whois.iana.org', $domain_name);
        if ($whois_buf == FALSE) {
            $last_error = 'unknow Tld';
            return FALSE;
        }
 
        //Parser la réponse de l'IANA
        $whois_server = self::parse($whois_buf, 'refer');
        if ($whois_server == FALSE) {
            $last_error = 'unknow Whois Server';
            return FALSE;
        }
 
        //Interroger le serveur de Whois
        $whois_buf = self::query_server($whois_server, $domain_name);
        if ($whois_buf == FALSE) {
            $last_error = 'Whois Server seens down';
            return FALSE;
        }
        return $whois_buf;
    }
 
    /**
     * Parser la fiche retournée par l'IANA
     * @param type $buf_whois
     * @param type $tag
     * @return boolean
     */
    private static function parse($buf_whois, $tag) {
        $spos = strpos($buf_whois, $tag . ':');
        if ($spos !== false) {
            $epos = strpos($buf_whois, "\n", $spos + 1);
            $spos+=strlen($tag . ':');
 
            if ($epos !== false) {
                return trim(substr($buf_whois, $spos, $epos - $spos));
            }
        }
        return FALSE;
    }
 
    private static function query_server($server, $domain) {
        /* $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, $server);
          curl_setopt($ch, CURLOPT_PORT, 43);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_TIMEOUT, self::TIMEOUT_REQUEST);
          curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $domain . "rn");
          $buf = curl_exec($ch);
          curl_close($ch);
          if (strlen($buf) > 10) {
          return $buf;
          } else {
          return FALSE;
          } */
 
        $socket = @fsockopen($server, 43, $errno, $errstr, self::TIMEOUT_REQUEST);
        if ($socket) {
            fputs($socket, $domain . "\r\n");
            $buf = '';
            while (!feof($socket)) {
                $buf.=fgets($socket, 1024);
            }
            fclose($socket);
            if ($errno == 0) {
                return $buf;
            } else {
                return FALSE;
            }
        } else {
            return FALSE;
        }
    }
}
?>

Quelques explications sur la class PHP Whois_DomainName
1. Le chargement du Whois se passe en 3 étapes:
- contacter l'iana pour obtenir le registrar en charge du TLD,
- parser la réponse de l'iana,
- envoyer une requête au registrar pour obtenir le Whois du site internet.
2. La communication avec le serveur de Whois utilise directement un socket sur le port 43. En commentaire, vous trouverez une solution avec cUrl.
3. Si une erreur devait se produire, vous trouverez le détail à l'aide: Whois_DomainName::last_error;

Exemple:
Pour charger le Whois du site Google.fr, utilisez la class PHP Whois_DomainName ainsi:
<?php
echo Whois_DomainName::query('google.fr');
?>

%%
%% This is the AFNIC Whois server.
%%

domain: google.fr
status: ACTIVE
hold: NO
holder-c: GIH6-FRNIC
admin-c: GIH5-FRNIC
tech-c: CP4370-FRNIC
zone-c: NFC1-FRNIC
nsl-id: NSL4386-FRNIC
registrar: MARKMONITOR Inc.
Expiry Date: 30/12/2016
created: 27/07/2000
last-update: 30/12/2015
source: FRNIC

ns-list: NSL4386-FRNIC
nserver: ns1.google.com
nserver: ns2.google.com
nserver: ns3.google.com
nserver: ns4.google.com
source: FRNIC
...


A l'aide du script PHP Whois_DomainName, vous pouvez charger le Whois de tous les noms de domaine quelle que soit l'extension. Cette requête permet de connaitre l'hébergeur ou le propriétaire du site internet.
Pour aller plus, nous vous proposerons prochainement un script qui permet de vérifier si un nom de domaine est disponible à la réservation.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
14/04/2016
Visualisation
vu 712 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par medfayz dans java

hi everybody thanks for the code , and please can any one help me to fix that exception.
javax.media.NoPlayerException: Cannot find a Player for :vfw:0

thanks

Publié par Celibataire dans news

Le trustrant est pas clair du tout peu d'informations sont disponibles sur lui!

Publié par agence cms open source dans tuto

Vu la multitude des outils de gestion de contenu Open Source, sélectionner l'un d'entre eux exige de réaliser une comparaison fine. Les lecteurs défendent les raisons de leurs cho...

Publié par Diviciakos dans CMS

Merci ! Bonne continuation

Publié par hilflo dans tuto

Tres bon article qui montre bien les subtilites des mutualises de 1and1.
Je l'ai utilise pour un de mes sites en y ajoutant de l'url rewriting pour eviter d'avoir des parametres dans l'url avec cet...