Desarrollador de aplicaciones web y de escritorio, amante de la tecnología y autodidacta, me gusta conocer otras tecnologías, escribir artículos para compartir en la web y para estar al tanto en los nuevos paradigmas, respeto las políticas de software privativo y libre, ya que estas políticas son las normas que permite el desarrollo tecnológico social de la humanidad. filvovmax@gmail.com -- info@gitmedio.com
Buscador de nombre dominios en PHP código fuente

WHOIS es un protocolo de TCP, en otras palabras, es una familia de protocolos de Internet que cumple la función para la consulta de un dominio e información de Sistema Autónomo y Protocolo de Internet.
En este articulo se ofrece como, realizar la consulta a la base de datos a un servidor WHOIS, en el que se determinara la disponibilidad de un nombre de dominio. En el lenguaje de programación PHP existen métodos que nos permite hacer las peticiones para consultar un nombre dominio especifico, con la cual nos permite implementar un cliente web buscador de nombre de dominios en PHP, ya que los servicios WHOIS son de accesos publico para mostrar información.
Para hacer una consulta al servidor WHOIS debemos saber el nombre del servidor y el puerto por lo general es el numero 43, por ejemplo whois.crsnic.net nos permite consultar a la base de datos y obtener información sobre la registración de un nombre de dominio con la extensión .com y .net.
A continuación veamos un sencillo ejemplo para realizar la petición a un servidor WHOIS, este nos muestre información.
<?php
//Almacenador de información
//por el servidor que devolverá datos
$infomacion ="";
//Nombre de dominio a consultar
$Dominio ="estadodolp.com";
//Nombre del servidor WOIS
$ServerWois ="whois.crsnic.net";
//Con la el método fsockopen se abre una conexión vía sockets a Internet
//lo cual devuelve un puntero
$sock = fsockopen($ServerWois, 43);
//Determinamos la conexion
//Si la conexión no se realiza correctamente
//se imprime el mensaje de error, por otro lado
//se accede a los datos.
if(!$sock){
echo "Servidor no encontrado para: ".$Dominio;
}else{
//Con el método fwrite() escribimos el contenido del del dominio apuntado por el sokect
//que devuelve un puntero a fichero.
fwrite($sock, $Dominio."\r\n");
//Bucleamos si el puntero a un archivo está al final del archivo
while(!feof($sock) ){
//Recuperamos el método fgets las líneas desde el puntero al fichero.
$infomacion .= fgets($sock,128);
}
//Se cierra la conexión al sockect de Internet
//abierta.
fclose($sock);
}
//Se imprime la información devuelto
//del servidor
echo "<pre>".$infomacion."</pre>";
?>
A continuación un ejemplo completo de un buscador de nombre de dominios en PHP, HTML5 y Ajax.
Archivo:index.html
<!--
Autor:Rodrigo Chambi Q.
-->
<!DOCTYPE html>
<html>
<head>
<title>Buscador de Dominio</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<!-- vinculo a bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Temas-->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
</head>
<body>
<style type="text/css">
#Contenedor{
width:50%;
padding: 20px;
height: auto;
margin: 50px auto;
}
.clarin{
width:84%;
}
</style>
<div id="Contenedor">
<div id="loader" align="center" style="margin-bottom: 6px;"></div>
<div class="row">
<form style="margin-bottom:20px; ">
<div class="btn-group">
<div class="input-group input-group-lg clarin" >
<div class="input-group-addon" ><i class="glyphicon glyphicon-globe"></i></div>
<input type="text" class="form-control" id="Nomb" name="Nomb" placeholder="google" style="border-right: none;">
<span class="input-group-btn">
<select class="form-control" id="Ext" name="Ext" style="height:46px; border-left: none;
border-top-left-radius:0px;
border-bottom-left-radius: 0px; font-size: 17px;">
<option>.com</option>
<option>.net</option>
<option>.bo</option>
<option>.mx</option>
<option>.pe</option>
<option>.co</option>
</select>
<button class="btn btn-success" id="Enviar" type="button"><i class="glyphicon glyphicon-search"></i> Buscar</button>
</span>
</div><!-- /input-group -->
</div>
</form>
<!--Aqui es donde se muestra la disponibilidad de Dominios-->
<div id="Mostrar">
</div>
</div>
</div>
<!-- vinculando a libreria Jquery-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Libreria java scritp de bootstrap -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script type="text/javascript">
var Incremento=0;
$("#Enviar").click(function(event) {
Incremento++;
//Validando
if($("#Nomb").val()==""){
$("#loader").html("<strong style='color:red;'>Error escriba el nombe del Dominio</strong>");
}else{
$("#loader").html("<img src='indicator.gif'>");
$.ajax({
url: 'buscador.php',
type: 'POST',
dataType: 'text',
data: {Nomb: $("#Nomb").val(),"Ext":$("#Ext").val(),"Incremento":Incremento},
})
.done(function(data) {
$("#loader").html("");
$("#Mostrar").append(data);
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
}
});
</script>
</body>
</html>
Archivo:buscador.php
<?php
/**
* Autor:Rodrigo Chambi Q.
* Script para la consulta de dominio
* a un sevidor WHOIS
*/
function WOIS($WOIS='',$Dominio){
$stringDatoWois="";
$Mostrar=array();
$sock = fsockopen($WOIS, 43);
if(!$sock){
$Mostrar[0]=false;
}else{
$Mostrar[0]=true;
fwrite($sock, $Dominio."\r\n");
while(!feof($sock) ){
$stringDatoWois .= fgetss($sock,128);
}
fclose($sock);
$Mostrar[1]=$stringDatoWois;
}
return $Mostrar;
}
$WoisNombre = array(
'.com' =>array('whois.crsnic.net','No match for'),//.com
'.net' =>array('whois.crsnic.net','No match for'),// .net
'.bo' =>array('whois.nic.bo','whois.nic.bo solo acepta consultas con dominios .bo'),//.bo
'.mx' =>array('whois.nic.mx','No_Se_Encontro_El_Objeto'),//.mx
'.pe' =>array('whois.nic.pe','No Object Found'),//.pe
'.co' =>array('whois.nic.co','Not found'));//.co
$NombreDominio =empty($_POST['Nomb']) ? false : $_POST['Nomb'];
$ExtesionDominio =empty($_POST['Ext']) ? false : $_POST['Ext'];
$incremento =empty($_POST['Incremento']) ? 0 : $_POST['Incremento'];
if(strlen($NombreDominio)>0){
$stringParser="";
$NombreDominio = preg_replace(array(
'/www./','/http:\//','/\//','/.com/',
'/.bo/','/.com.bo/','/edu.bo/',
'/.org.bo/','/.net/','/.mx/',
'/.pe/','/.co/'), '', $NombreDominio);
foreach ($WoisNombre as $key => $value) {
if($key==$ExtesionDominio){
if (WOIS($value[0],$NombreDominio.$ExtesionDominio)[0]==true){
$DatoSWois= WOIS($value[0],$NombreDominio.$ExtesionDominio)[1];
$Disponible='<div class="alert alert-success alert-dismissible" style="margin-top:5px;" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<span>El dominio <strong>'.$NombreDominio.$ExtesionDominio.'</strong> esta <strong>disponible.</strong> para la realizacion de compra. </span>
<button class="btn btn-success" id="Enviar" type="button"><i class="glyphicon glyphicon-shopping-cart"></i> Comprar</button>
</div>';
$NoDisponible='<div class="alert alert-danger alert-dismissible" role="alert" style="margin-top:5px;">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<span>El dominio <strong>'.$NombreDominio.$ExtesionDominio.'</strong> esta <strong>no esta disponible.</strong></span>
<a class="btn btn-linnk" role="button" data-toggle="collapse" href="#collapseExample'.$incremento .'" aria-expanded="false" aria-controls="collapseExample'.$incremento .'">
Ver el autor registrante
</a>
<div class="collapsing" id="collapseExample'.$incremento .'">
<div class="well">
<pre>'.WOIS($value[0],$NombreDominio.$ExtesionDominio)[1].'</pre>
</div>
</div>
</div>';
//Quitamos algunos caracteres
//del servidor WHOIS Boliviano
if($key==".bo"){
$DatoSWois=str_replace(array("\r\n", "\n", "\r"), '', $DatoSWois);
if($DatoSWois==$value[1]){
echo $Disponible;
}else{
echo $NoDisponible;
}
}else{
//Buscamos
if (preg_match("/".$value[1]."/i",$DatoSWois)){
echo $Disponible ;
}else{
echo $NoDisponible;
}
}
}else{
}
}
}
}
?>
Existe una librería llamada libcurl que esta disponible a partir PHP 4.0.2. que permite conectarse y comunicarse con diferentes tipos de servidores y diferentes tipos de protocolos, la cual seria un mejor opción implementar un buscador de nombre de dominios en PHP. Espero que sea de mucha ayuda este artículo.
Ejemplo:
Hola, me sirvio de mucho este post, pero necesito validar tambien dominios .com.py .net.py me podrian ayudar por favor
Sabes que trato de modificarlo para buscar dominios de Venezuela (.com.ve, .net.ve, .org.ve, etc) y no logro que haga la busqueda….
Hola a todos, e puesto en marcha este codigo, se ve prometedor, solo que al correrlo en el navegador me manda un error «Fatal error: Uncaught Error: Call to undefined function fgetss() in buscador.php:17 Stack trace: #0, buscador.php(43): WOIS(‘whois.crsnic.ne…’, ‘midominio.com’) #1 {main} thrown in buscador.php on line 17»
Alguien que ya haya solucionado este inconveniente, de antemano muchas gracias.
Yo coloco el nombre que sea y el .com o .mx, simplemente carga y no me muestra nada, cuál sería el error ahí?
descargue su excelente aporte pero me provoca el siguiente error:
si coloco por ejemplola palabra record o la palabra compartir o cualquiera que dentro de la palabra tenga las silabas de la extension (com, co) el buscadpr omite estas silabas
ejemplo coloco record me muestra solo rrd
necesito una ayuda al respecto, me encantaria poder usar este script
Excelente Post, existe alguna solución para los dominios .CL de Chile, he probado pero no logro que funcione. Quedo atento.
‘.cl’ =>array(‘whois.nic.cl’,’No_Se_Encontro_El_Objeto’),//.cl
__________________________________________________
$NombreDominio = preg_replace(array(
‘/www./’,’/http:\//’,’/\//’,’/.com/’,
‘/.bo/’,’/.com.bo/’,’/edu.bo/’,
‘/.org.bo/’,’/.net/’,’/.mx/’,’/.cl/’,
Hola, tengo el mismo inconveniente, los dominios .cl así estén disponible dicen no disponible y usé éste mismo código, por favor su ayuda
‘.cl’ =>array(‘whois.nic.cl’,’no entries found’));//.cl
‘.cl’ =>array(‘whois.nic.cl’,’no entries found.’));//.cl
,’.cl’), », $NombreDominio);
amigo muy buen aporte colega
[sirve muy bien] «no me funcionan .bo .mx .co»
yo no se mucho de programación aprendo gracias a post como estos?
me puede ayudar con el arreglo por favor y se puede redireccionar las elecciones de compra ?
hola lo subi a mi servidor web y me sale este error Warning: fsockopen(): unable to connect to whois.crsnic.net:45 (Network is unreachable) in /srv/disk10/2878442/www/temporaldominios.atwebpages.com/buscador.php on
Saludos Rodrigo, nuevamente yo por acá, logré resolver el conflicto jquery, pero tengo otra pregunta, me gustaría usar en dos secciones de mi web el mismo buscador, pero al hacerlo el segundo form se invalida, que puedo hacer para que ambos funcionen?, si me puedes ayudar agradecido. Exitos para ti.
Saludos Rodrigo, excelente tu codigo, lo probe y esta de maravilla, necesito tu ayuda y de ante mano disculpa la molestia. En mi proyecto estoy usando jquery 3.2.1 y este jquery es 1.1.2, y tengo conflictos de ejecución, y la verdad es que no se como eliminar este conflicto. estuve viendo usar el jquery noconflict, lo coloco en diferentes sitio y no me funciona, podrias ayudarme a solucionar este problemita, agradecido y exitos para ti….
hola muy buen post buscava uno asi pero me presenta un problema cuando realiza la busqueda de una dominio no me sale informacion solo me sale un cuadro pequeño tratando de mostrar una imagen pero no aparece nada
Excelente la publicación, pero hay un problema en la devolución de los resultados de búsqueda: por ejemplo busco el siguiente dominio radiocora.com y me da el siguiente mensaje:
El dominio radira.com esta no esta disponible.
Podrían indicarme el motivo del error?
Muchas gracias
Hola Billy – El mensaje muestra que el dominio ya pertenece a otra persona, en otras palabras el dominio ya no esta disponible .
Ami me pasa lo mismo, escribo elpedrito.com y me sale epedrito.com esta disponible, No me sale todo el nombre del dominio
Amigo excelente codigo , puedo utilizarlo en diferentes sitios web? muchas gracias.
Hola ronni.
Puedes utilizar en los diferentes sitios web.
Hola Rodrigo, excelente post… pero de casualidad no tienes un tutorial sobre como hacer el formulario de registro de dominios en mi web usando la API de un registrador de dominios?
Warning: preg_match() expects parameter 2 to be string, array given in line 73
Me arroja este error, está mal la codificación?
Parse error: syntax error, unexpected ‘{‘ in C:\AppServ\www\whois\buscador.php on line 43
A mi me sale lo mimos pero en vez de «{» me dice que el error es «[«:
Parse error: syntax error, unexpected ‘[‘ in /home/midominio/domains/midominio.com/public_html/buscador.php on line 43
¿Alguien sabe como solucionar este error?
Muchas gracias.
Estimado Rodrigo necesito tus servicios favor contactarte a mi correo ()
Me parece excelente. Está muy bien aunque aun no lo he configurado del todo. Pero una pregunta ¿Una vez el usuario ha pagado por paypal u otro medio de pago, dónde queda registrado dicho dominio?
Buenos dias, hagame un favor para poner posibles dominios luego de la busqueda como quedaria el codigo o que codigo se le gregaria?
alguien sabe cómo se consulta para el caso de los dominios com.ar?
Saludos amigo excelente tu post..
Pero puedo personalizar el boton comprar para agregarle un link de cobro de paypal directo?
Ya que el modelo solo se ve el boton que no acciona…
Gracias…
Un abrazo Javier, puedes modificar a tu gusto, y se pones el link de cobro para Paypal por favor comenta abajo para que otros también se beneficien.
Disculpa ya lo arregle jeje era poner el error de salida del servidor cambie el «No Object Found» por la salida que era «No match» jeje Gracias mi pana
Muy bien Jean Castillo, El primer ejemplo de código sencillo muestra la información al hacer petición a un servidor WHOIS, esta siempre devolverá datos como «No match for» o como «No Object Found» como en tu caso si es que no existe registrado el dominio, caso contrario muestra toda la información registrada.
Siempre me sale este alert cuando el dominio esta libre Que crees que sea amigo? Gracias de antemano
Servidor Whois del Centro de Información de Red de Venezuela (NIC.VE)
Este servidor contiene información autoritativa exclusivamente de dominios .VE
Cualquier consulta sobre este servicio, puede hacerla al correo electrónico whois@nic.ve
No match for «xxxxxxxxx.com.ve».
NIC-Venezuela – CONATEL
http://www.nic.ve
Buenas amigo, excelente tu post pero tengo una duda quiero hacer ese buscador también para mi país pero cuando agrego las lineas:
1.- ‘.com.ve’ =>array(‘whois.nic.ve’,’No Object Found’),//.ve
$NombreDominio = preg_replace(array(
‘/www./’,’/http:\//’,’/\//’,’/.com/’,
‘/.bo/’,’/.com.bo/’,’/edu.bo/’,
‘/.org.bo/’,’/.net/’,’/.mx/’,
‘/.pe/’,’/.co/’,’/.com.ve/’,’/.ve/’)
No logro hacer que quede » El dominio xxxxxxxx.com.ve esta disponible. para la realización de compra.» Como puedo validar esa información porque trate de usar whois.nic.ve y ni idea de verdad