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">&times;</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">&times;</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:

Descargar Ejemplo 15KB

Sobre el autor
Rodrigo Chambi Q.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

33 Comentarios

  1. De Esteban Trinidad

    Responder

  2. Responder

  3. Responder

  4. De Ana

    Responder

  5. De Vincent Gabriel

    Responder

  6. De Javier

    Responder

    • Responder

      • De Jeni

        Responder

        • De Rodrigo

          Responder

          • De lion ilustre

  7. De Juan Carlos Yepes Rua

    Responder

  8. De francisco toro

    Responder

  9. De francisco toro

    Responder

  10. Responder

  11. De Billy

    Responder

    • De Rodrigo Chambi.

      Responder

      • De Victor

        Responder

  12. De ronni

    Responder

    • De Rodrigo

      Responder

  13. Responder

  14. De Carlos

    Responder

  15. De Carlos

    Responder

    • De Roberto

      Responder

  16. De Edgar

    Responder

  17. Responder

  18. De Carlos

    Responder

  19. Responder

  20. De Javier Ramos

    Responder

    • De Rodrigo

      Responder

  21. De Jean Castillo

    Responder

    • De Rodrigo

      Responder

  22. De Jean Castillo

    Responder

  23. De Jean Castillo

    Responder