Incription
RSS

Noms de domaine – Script PHP Whois

Samedi 4 avril 2009

Langage : PHP - Type : Fonction - Niveau : Confirmé

Bonjour,
voici une fonction qui va vous permettre de vérifier la disponibilité d’un nom de domaine.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
 
	// -----------------------------------------------------------
	// Auteur         : johnstyle
	// Date édition   : 03 Avril 2009
	// Website auteur : http://www.johnstyle.fr
	// Website script : http://www.johnstyle.fr/langage/php/noms-de-domaine-script-php-whois/
	// -----------------------------------------------------------
 
 
	// Informations spécifiques aux extenssions
	$info = array(
		'fr' 	=> array(
			'host' 		=> 'whois.nic.fr',
			'regexp'	=> 'No[s]*entries[s]*found',
			'pending'	=> 'status[s]*:[s]*REDEMPTION'
		),
		'com' 	=> array(
			'host' 		=> 'whois.crsnic.net',
			'regexp'	=> 'No[s]*match[s]*for'
		),
		'net' 	=> array(
			'host' 		=> 'whois.crsnic.net',
			'regexp'	=> 'No[s]*match[s]*for'
		),				
	);
 
	function simpleWhois($domain, $tdl, $debug=false){
		// Fonction de traitement
		// -----------------------------------------------
		// 0	=> Info, le nom est pris
		// 1	=> Info, le nom est libre
		// 2	=> Info, le nom est en pending
		// 3 	=> Avertissement, trop de requêtes
		// 4 	=> Erreur, il faut spécifier une chaine à rechercher (regexp)
		// 5 	=> Erreur, la requête retournée était vide
		// -----------------------------------------------
		global $info;
 
		// Initialisation de la sortie
		$output		= '';
 
		// Initialisation de la requête
		$req		= fsockopen($info[$tdl]['host'], 43, $errno, $errstr, 5); // le 5 permet de stoper la requete si aucune réponse au bout de 5 secondes
 
		// Récupération de la requête
		if($req){
			fputs($req, $domain.'.'.$tdl."rn");
			while(!feof($req)) $output .= fgets($req, 4096);
			fclose($req);		
		}else unset($req);
 
		// mode debug
		if($debug) return $output;
 
		// Sortie vide
		if(empty($output)) return 5;
 
		// Trop de requêtes
		if(preg_match("/(Too[s]+many[s]+requests|Your[s]+connection[s]+limit[s]+exceeded|daily[s]+whois[s]+limit[s]+exceeded|Maximum[s]+queries|WHOIS[s]+LIMIT[s]+EXCEEDED|referral[s]+host[s]+not[s]+responding|Excessive[s]+querying)/i", $output)) return 3; 
 
		// Pending
		if(isset($info[$tdl]['pending']) && !empty($info[$tdl]['pending']) && preg_match("/".$info[$tdl]['pending']."/i", $output)) return 2; 
 
		// Info de recheche manquant
		if(!isset($info[$tdl]['regexp']) || empty($info[$tdl]['regexp'])) return 4; 
 
		// Libre
		if(preg_match("/".$info[$tdl]['regexp']."/i", $output)) return 1; 
 
		// Pris
		return 0;
	}
 
 
	// ==========================================
	// Exemple d'utilisation
	// ==========================================
 
		// Traitement d'une liste de domaines
		// --------------------------------------------------
 
			// Tableau des domaines
			$tab = array(
				'toto.com',
				'momo.com',
				'yoyo.fr',
				'65qs4df56q4qsdqsd.com',
				'koko.net',
				'zozo.net',
				'soso.net',
				'qoqo.net',
				'qs56d4qs56d4qs65d4qs564.net',
				'xoxo.net',
				'coco.com',
				'hoho.fr',
				'nono.net',
				'dodo.com',
				// etc..
			);
 
			// Récupération des résultats
			$output = false;
 
			// Exécution
			if($tab){
				foreach($tab as $host){
					list($domain, $tdl) = split(".", $host, 2); // le 2 permet de s'arreter après le 1er point ce qui permet d'avoir des extenssion du type .com.fr
					$output[$host] 		= simpleWhois($domain, $tdl);
				}
			}
 
			// Affichage "brut" des données traitées
			if($output){
				print_r($output);
			}
 
		// Mode debug
		// --------------------------------------------------
			echo simpleWhois('azerty', 'com', true);
 
	// ==========================================
	// ==========================================
 
?>

Cet article a été écrit par :

Johnstyle - qui est l'auteur de 11 article(s).

"Savoir ce que tout le monde sait, c'est ne rien savoir. Le savoir commence là où commence ce que le monde ignore."

Contacter l'auteur

Share and Enjoy: Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

5 Commentaires

  1. markipoli

    Salut,

    En testant le script tel quel, fsockopen plante chez moi, tout les noms de domaines testés renvoient « 5″.

    Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in /Library/WebServer/Documents/ndd.php on line 44

    Warning: fsockopen() [function.fsockopen]: unable to connect to :43 (php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known) in /Library/WebServer/Documents/ndd.php on line 44

    (oui, je suis sous mac, mais avec la dernière version de php/apache)

    @+

  2. Johnstyle

    Apparemment il s’agirait d’un problème de configuration du serveur, malheureusement je n’ai jamais rencontré ce type d’erreur et je n’ai pas de solution à vous proposer. Cependant vous pouvez faire quelques recherches ici :
    http://www.google.fr/search?q=php_network_getaddresses:%20getaddrinfo%20failed
    http://bugs.php.net/bug.php?id=11058

    Si vous trouvez la solution, n’hésitez pas à nous la faire partager :)
    A bientôt.

  3. Romain

    Nikel ce script mais j’ai esseyer de rajouter des extensions mais sa ne fonctionne pas par exemple pour le .org:

    ‘org’ => array(
    ‘host’ => ‘whois.pir.org’,
    ‘regexp’ => ‘NOT[\s]*FOUND’
    ),

    Mais cela ne fonctionne pas, une solutions pour connaitre les serveurs whois et leurs réponse??

  4. zounars

    Merci pour le script.

    J’ai remarqué qu’il fonctionne bien sur un serveur et non sur l’autre. il m’affiche occupé pour tous les noms de domaines chez hostgator pendant que chez 1and1, j’ai certains noms disponibles. comment cela peut-il s’expliquer?

    2- chez 1and1 http://oyamnvo.com/script_disponibilite_nom_de_domaine.php

    2- chez hostgator http://www.lenetpourtous.com/script_disponibilite_nom_de_domaine.php

    merci de m’aider à trouver une solution

  5. Johnstyle

    Bonjour,
    excusez moi pour le temps de réponse…

    Je pense que hostgator n’autorise pas les requête par socket, pour vérifier activez les erreur PHP en plaçant cette ligne au début de votre fichier : error_reporting(E_ALL);
    Ensuite essayez de faire un debug avec le script de disponibilité. (cf: exemple).

1 Trackbacks

  1. Script de vérification de disponibilité des Noms d… | 1NDD

    [...] un petit script pour vérifier la disponibilité des noms de domaine, vous pouvez le trouver ici : http://www.johnstyle.fr/langage/php/noms-de-domaine-script-php-whois/ Quelques notions de PHP seront cependant nécessaire [...]

Laisser un commentaire

:alien: :angel: :angry: :blink: :blush: :cheerful: :cool: :cwy: :devil: :dizzy: :ermm: :face: :getlost: :biggrin: :happy: :heart: :kissing: :lol: :ninja: :pinch: :pouty: :sad: :shocked: :sick: :sideways: :silly: :sleeping: :smile: :tongue: :unsure: :w00t: :wassat: :whistle: :wink: :wub: