Script shell vérifiant la disponibilité d’un nom de domaine
Un petit script pour déterminer si un nom de domaine est libre ou déjà déposé.
Les serveurs whois des différents registres de premier niveau renvoyant des réponses structurées différemment, il faut déterminer pour chaque TLD la réponse-type correspondant à un nom de domaine libre et l’inclure dans le script.
Voici ce que retourne une requête whois sur « domainequinexistesurementpas.fr » :
[root@pc-linux]# whois domainequinexistesurementpas.fr [Requête en cours whois.nic.fr] [whois.nic.fr] %% %% This is the AFNIC Whois server. %% %% complete date format : DD/MM/YYYY %% short date format : DD/MM %% version : FRNIC-2.5 %% %% Rights restricted by copyright. %% See http://www.afnic.fr/afnic/web/mentions-legales-whois_en %% %% Use '-h' option to obtain more information about this service. %% %% [XX.XX.XX.XX REQUEST] >> domainequinexistesurementpas.fr %% %% RL Net [##########] - RL IP [#########.] %% %% No entries found in the AFNIC Database.
A présent, la même requête sur « domainequinexistesurementpas.it » :
[root@pc-linux]# whois domainequinexistesurementpas.it [Requête en cours whois.nic.it] [whois.nic.it] Domain: domainequinexistesurementpas.it Status: AVAILABLE
Les deux réponses sont totalement différentes (« No entries found in the AFNIC Database » pour le .fr, « Status: AVAILABLE » pour le .it). Il est donc indispensable de prendre en compte, pour chaque TLD, la réponse-type correspondant à un nom de domaine libre.
En cas d’interrogation sur un TLD qui n’a pas été prévu dans le script, ce dernier retourne : « TLD NON PRIS EN COMPTE ».
Une particularité du script : placer dans une variable dans une autre variable. Cette particularité apparaît au moment de filtrer la réponse avec la réponse-type correspondant au TLD : la commande grep doit prendre en paramètre le contenu de la variable correspondant à la réponse-type du TLD, mais le nom de cette variable n’est pas fixe.
Le script :
#!/bin/bash # On place dans une variable le TLD du domaine interrogé. # Le . est remplacé par _ (cas du .co.uk notamment) pour des raisons de noms de variables. tld=`echo $1 | cut -f 2- -d . | sed -e "s/\./_/"` # On place pour chaque TLD la réponse-type d'un domaine libre dans une variable. # La variable porte le nom du TLD, avec le _ remplaçant le . si nécessaire. fr="No entries found" be="Status: FREE" ch="We do not have an entry" de="Status: free" it="Status: AVAILABLE" pl="No information available" pt="no match" fi="Domain not found" no="No match" nl="is free" dk="No entries found" ru="No entries found" at="nothing found" co_uk="No match for" net_uk="Not match for" org_uk="No match for" uk="Error for" com="No match for" net="No match for" org="NOT FOUND" info="NOT FOUND" biz="Not found" ws="No match for" edu="No Match" xxx="No match for" if [ -z $1 ]; then echo "PARAMETRE MANQUANT" else if [ -z $2 ]; then if [ -z "${!tld}" ]; then # Aucune variable n'est nommée comme le TLD : pas de réponse-type echo "TLD NON PRIS EN COMPTE" else # On filtre la réponse du whois avec la réponse-type du TLD. if [ -z "`whois $1 | grep "${!tld}"`" ]; then echo "ENREGISTRE" else echo "LIBRE" fi fi else echo "PARAMETRE EN TROP" fi fi
Le script en action :
[root@pc-linux]# ./dispo_ndd.sh domaine.fr ENREGISTRE [root@pc-linux]# ./dispo_ndd.sh domaine-existepas.fr LIBRE [root@pc-linux]# ./dispo_ndd.sh domaine.ca DOMAINE NON DISPONIBLE

Super, simple et efficace.. Merci