Publié le 14/04/2016
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
0 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 2048 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Axel dans java

le resultat de la fonction getMacAddress() est de type String,
ainsi pour afficher l'adresse MAC dans une JLabel

String macAddress=NetworkHardware.getMacAddress();
label.setText(macAd...

Publié par pidjey dans php5

J'ai bien lu mais c'est vraiment trop fort et trop dur pour le moment, je sais pas vraiment comprendre vos syntaxes, elles sont enormes et moi, je ne suis qu'encore un debutant en PHP et il faudrait p...

Publié par Fobec dans php5

En effet, Twitter a modifie la structure de son API. P'etre qu'un jour, on trouve le temps pour finaliser un wrapper pour la version 1.1

Publié par Christophe dans CMS

je te propose d'améliorer la fonction
procedure TForm1.Button1Click(Sender: TObject);
begin
GetDesktopListViewHandle;
ListView_SetTextBkColor(hLV, $FFFFFFFF);
ListView_Re...

Publié par Mohamed dans java

Merci beaucoup j'ai eu un probleme de redimensionnement des images , mes images perdaient leur qualite, ta solution m'a aide pour ca mercii