How to view domain availability (whois) with php?

Asked

Viewed 865 times

3

How do I check the availability of a national domain (.br) and others using PHP? Is there any php class ready for this?

1 answer

2


This model besides showing availability has a modal with all the information .

<!DOCTYPE html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script language="javascript" src="/colorbox/jquery.colorbox.js"></script>
    <link rel="stylesheet" type="text/css" href="/colorbox/colorbox.css">
    <script>
      $(document).ready(function(){
      $(".inline").colorbox({inline:true, width:"60%", height:"60%"});
      });
    </script>

    </head>

    <?php
    error_reporting(E_ALL & ~ E_NOTICE);
    #######################################################################
    #               PHP Whois Lookup Class
    #   Script Url: http://99webtools.com/php-whois-script.php
    #   Author: Sunny Verma
    #   Email: [email protected]
    #   Website: http://99webtools.com
    #   License: GPL 2.0, @see http://www.gnu.org/licenses/gpl-2.0.html
    ########################################################################
    class Whois{
    private $WHOIS_SERVERS = array(
    "com"               =>  array("whois.verisign-grs.com","whois.crsnic.net"),
    "net"               =>  array("whois.verisign-grs.com","whois.crsnic.net"),
    "org"               =>  array("whois.pir.org","whois.publicinterestregistry.net"),
    "info"              =>  array("whois.afilias.info","whois.afilias.net"),
    "biz"               =>  array("whois.neulevel.biz"),
    "us"                =>  array("whois.nic.us"),
    "uk"                =>  array("whois.nic.uk"),
    "ca"                =>  array("whois.cira.ca"),
    "tel"               =>  array("whois.nic.tel"),
    "ie"                =>  array("whois.iedr.ie","whois.domainregistry.ie"),
    "it"                =>  array("whois.nic.it"),
    "li"                =>  array("whois.nic.li"),
    "no"                =>  array("whois.norid.no"),
    "cc"                =>  array("whois.nic.cc"),
    "eu"                =>  array("whois.eu"),
    "nu"                =>  array("whois.nic.nu"),
    "au"                =>  array("whois.aunic.net","whois.ausregistry.net.au"),
    "de"                =>  array("whois.denic.de"),
    "ws"                =>  array("whois.worldsite.ws","whois.nic.ws","www.nic.ws"),
    "sc"                =>  array("whois2.afilias-grs.net"),
    "mobi"              =>  array("whois.dotmobiregistry.net"),
    "pro"               =>  array("whois.registrypro.pro","whois.registry.pro"),
    "edu"               =>  array("whois.educause.net","whois.crsnic.net"),
    "tv"                =>  array("whois.nic.tv","tvwhois.verisign-grs.com"),
    "travel"            =>  array("whois.nic.travel"),
    "name"              =>  array("whois.nic.name"),
    "in"                =>  array("whois.inregistry.net","whois.registry.in"),
    "me"                =>  array("whois.nic.me","whois.meregistry.net"),
    "at"                =>  array("whois.nic.at"),
    "be"                =>  array("whois.dns.be"),
    "cn"                =>  array("whois.cnnic.cn","whois.cnnic.net.cn"),
    "asia"              =>  array("whois.nic.asia"),
    "ru"                =>  array("whois.ripn.ru","whois.ripn.net"),
    "ro"                =>  array("whois.rotld.ro"),
    "aero"              =>  array("whois.aero"),
    "fr"                =>  array("whois.nic.fr"),
    "se"                =>  array("whois.iis.se","whois.nic-se.se","whois.nic.se"),
    "nl"                =>  array("whois.sidn.nl","whois.domain-registry.nl"),
    "nz"                =>  array("whois.srs.net.nz","whois.domainz.net.nz"),
    "mx"                =>  array("whois.nic.mx"),
    "tw"                =>  array("whois.apnic.net","whois.twnic.net.tw"),
    "ch"                =>  array("whois.nic.ch"),
    "hk"                =>  array("whois.hknic.net.hk"),
    "ac"                =>  array("whois.nic.ac"),
    "ae"                =>  array("whois.nic.ae"),
    "af"                =>  array("whois.nic.af"),
    "ag"                =>  array("whois.nic.ag"),
    "al"                =>  array("whois.ripe.net"),
    "am"                =>  array("whois.amnic.net"),
    "as"                =>  array("whois.nic.as"),
    "az"                =>  array("whois.ripe.net"),
    "ba"                =>  array("whois.ripe.net"),
    "bg"                =>  array("whois.register.bg"),
    "bi"                =>  array("whois.nic.bi"),
    "bj"                =>  array("www.nic.bj"),
    "br"                =>  array("whois.nic.br"),
    "bt"                =>  array("whois.netnames.net"),
    "by"                =>  array("whois.ripe.net"),
    "bz"                =>  array("whois.belizenic.bz"),
    "cd"                =>  array("whois.nic.cd"),
    "ck"                =>  array("whois.nic.ck"),
    "cl"                =>  array("nic.cl"),
    "coop"              =>  array("whois.nic.coop"),
    "cx"                =>  array("whois.nic.cx"),
    "cy"                =>  array("whois.ripe.net"),
    "cz"                =>  array("whois.nic.cz"),
    "dk"                =>  array("whois.dk-hostmaster.dk"),
    "dm"                =>  array("whois.nic.cx"),
    "dz"                =>  array("whois.ripe.net"),
    "ee"                =>  array("whois.eenet.ee"),
    "eg"                =>  array("whois.ripe.net"),
    "es"                =>  array("whois.ripe.net"),
    "fi"                =>  array("whois.ficora.fi"),
    "fo"                =>  array("whois.ripe.net"),
    "gb"                =>  array("whois.ripe.net"),
    "ge"                =>  array("whois.ripe.net"),
    "gl"                =>  array("whois.ripe.net"),
    "gm"                =>  array("whois.ripe.net"),
    "gov"               =>  array("whois.nic.gov"),
    "gr"                =>  array("whois.ripe.net"),
    "gs"                =>  array("whois.adamsnames.tc"),
    "hm"                =>  array("whois.registry.hm"),
    "hn"                =>  array("whois2.afilias-grs.net"),
    "hr"                =>  array("whois.ripe.net"),
    "hu"                =>  array("whois.ripe.net"),
    "il"                =>  array("whois.isoc.org.il"),
    "int"               =>  array("whois.isi.edu"),
    "iq"                =>  array("vrx.net"),
    "ir"                =>  array("whois.nic.ir"),
    "is"                =>  array("whois.isnic.is"),
    "je"                =>  array("whois.je"),
    "jp"                =>  array("whois.jprs.jp"),
    "kg"                =>  array("whois.domain.kg"),
    "kr"                =>  array("whois.nic.or.kr"),
    "la"                =>  array("whois2.afilias-grs.net"),
    "lt"                =>  array("whois.domreg.lt"),
    "lu"                =>  array("whois.restena.lu"),
    "lv"                =>  array("whois.nic.lv"),
    "ly"                =>  array("whois.lydomains.com"),
    "ma"                =>  array("whois.iam.net.ma"),
    "mc"                =>  array("whois.ripe.net"),
    "md"                =>  array("whois.nic.md"),
    "mil"               =>  array("whois.nic.mil"),
    "mk"                =>  array("whois.ripe.net"),
    "ms"                =>  array("whois.nic.ms"),
    "mt"                =>  array("whois.ripe.net"),
    "mu"                =>  array("whois.nic.mu"),
    "my"                =>  array("whois.mynic.net.my"),
    "nf"                =>  array("whois.nic.cx"),
    "pl"                =>  array("whois.dns.pl"),
    "pr"                =>  array("whois.nic.pr"),
    "pt"                =>  array("whois.dns.pt"),
    "sa"                =>  array("saudinic.net.sa"),
    "sb"                =>  array("whois.nic.net.sb"),
    "sg"                =>  array("whois.nic.net.sg"),
    "sh"                =>  array("whois.nic.sh"),
    "si"                =>  array("whois.arnes.si"),
    "sk"                =>  array("whois.sk-nic.sk"),
    "sm"                =>  array("whois.ripe.net"),
    "st"                =>  array("whois.nic.st"),
    "su"                =>  array("whois.ripn.net"),
    "tc"                =>  array("whois.adamsnames.tc"),
    "tf"                =>  array("whois.nic.tf"),
    "th"                =>  array("whois.thnic.net"),
    "tj"                =>  array("whois.nic.tj"),
    "tk"                =>  array("whois.nic.tk"),
    "tl"                =>  array("whois.domains.tl"),
    "tm"                =>  array("whois.nic.tm"),
    "tn"                =>  array("whois.ripe.net"),
    "to"                =>  array("whois.tonic.to"),
    "tp"                =>  array("whois.domains.tl"),
    "tr"                =>  array("whois.nic.tr"),
    "ua"                =>  array("whois.ripe.net"),
    "uy"                =>  array("nic.uy"),
    "uz"                =>  array("whois.cctld.uz"),
    "va"                =>  array("whois.ripe.net"),
    "vc"                =>  array("whois2.afilias-grs.net"),
    "ve"                =>  array("whois.nic.ve"),
    "vg"                =>  array("whois.adamsnames.tc"),
    "yu"                =>  array("whois.ripe.net")
    );
    public function whoislookup($domain)
    {
    $domain = trim($domain); //remove space from start and end of domain
    if(substr(strtolower($domain), 0, 7) == "http://") $domain = substr($domain, 7); // remove http:// if included
    if(substr(strtolower($domain), 0, 4) == "www.") $domain = substr($domain, 4);//remove www from domain
    if(preg_match("/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/",$domain))
    return $this->queryWhois("whois.lacnic.net",$domain);
    elseif(preg_match("/^([-a-z0-9]{2,100})\.([a-z\.]{2,8})$/i",$domain))
    {
    $domain_parts = explode(".", $domain);
    $tld = strtolower(array_pop($domain_parts));
    $server = $this->WHOIS_SERVERS[$tld][0];
    if(!$server) {
    return "Error: Nenhum servidor WHOIS apropriado encontrado para o domínio $domain!";
    }
    $res=$this->queryWhois($server,$domain);
    while(preg_match_all("/Whois Server: (.*)/", $res, $matches))
    {
    $server=array_pop($matches[1]);
    $res=$this->queryWhois($server,$domain);
    }
    return $res;
    }
    else
    return "invalido";
    }
    private function queryWhois($server,$domain)
    {
    $fp = @fsockopen($server, 43, $errno, $errstr, 20) or die("Socket Error " . $errno . " - " . $errstr);
    if($server=="whois.verisign-grs.com")
    $domain="=".$domain;
    fputs($fp, $domain . "\r\n");
    $out = "";
    while(!feof($fp)){
    $out .= fgets($fp);
    }
    fclose($fp);
    return $out;
    }
    }

    if ($_POST["dominio"]){
        $dominio=$_POST["dominio"];
        $whois=new Whois;

        $result= $whois->whoislookup($dominio);

        $result="<p>".$result."</p>";

        $pos = strpos($result, "invalido");
        if ($pos === false) {
            $pos = strpos($result, "No match for");
            if ($pos === false) {
                  echo "Dominio registrado";
                  echo "<br><a class='inline' href=\"#inline_content\" title=\"Whois ".$dominio."\">Mostrar informações</a><br>";
                  echo "<div style='display:none'><div id='inline_content' style='padding:10px; background:#fff;'><pre>".$result."</pre></div></div>";
            } else {
                  echo "Dominio ( ".$dominio." ) disponível para registro";
            }
        }else{

           echo "Nome de dominio ( ".$dominio." ) inválido";

        }

    }
    ?>


    <form method="post" action="">
    <input type="text" name="dominio" size="30">
    <input type=submit value=Consultar>
    </form>

github colorbox library

if you do not want to use colorbox library you can use a CSS-only modal

In this case remove the references and the script that is in the head section and put this CSS

      .modalDialog {
      position: fixed;
      font-family: Arial, Helvetica, sans-serif;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      background: rgba(0, 0, 0, 0.8);
      z-index: 99999;
      opacity: 0;
      -webkit-transition: opacity 400ms ease-in;
      -moz-transition: opacity 400ms ease-in;
      transition: opacity 400ms ease-in;
      pointer-events: none;
    }
    .modalDialog:target {
      opacity: 1;
      pointer-events: auto;
    }
    .modalDialog > div {
      width: 700px;
      height: 600px;
      position: relative;
      margin: 10% auto;
      padding: 5px 20px 13px 20px;
      border-radius: 10px;
      background: #fff;
      background: -moz-linear-gradient(#fff, #999);
      background: -webkit-linear-gradient(#fff, #999);
      background: -o-linear-gradient(#fff, #999);
      overflow: scroll;
    }
    .close {
      background: #606061;
      color: #FFFFFF;
      line-height: 25px;
      position: absolute;
      text-align: center;
      width: 24px;
      text-decoration: none;
      font-weight: bold;
      -webkit-border-radius: 12px;
      -moz-border-radius: 12px;
      border-radius: 12px;
      -moz-box-shadow: 1px 1px 3px #000;
      -webkit-box-shadow: 1px 1px 3px #000;
      box-shadow: 1px 1px 3px #000; 
    }
    .close:hover { background: #00d9ff; }
    .child { position:fixed;}
    .parent { position:absolute; }

and the final part of PHP replaces these two lines

    echo "<br><a class='inline' href=\"#inline_content\" title=\"Whois ".$dominio."\">Mostrar informações</a><br>";
    echo "<div style='display:none'><div id='inline_content' style='padding:10px; background:#fff;'><pre>".$result."</pre></div></div>";

For

    echo "<br><a href=\"#openModal\">Mostrar informações</a><br>
    <div id=\"openModal\" class=\"modalDialog\">
         <div class=\"parent\">
              <div class=\"child\"><a href=\"#close\" title=\"Close\" class=\"close\" id=\"fixedContainer\">X</a>
               </div>
               <p><pre>".$result."</pre></p>
          </div>
    </div>";
  • Leo, you have a link reference?

  • The link, as well as the author and other relevant data are in the code itself.

  • I noticed. I was missing the .com. Thanks I’ll see if it works

  • his code only brings you domain information. Whether it is registered or not I have implemented.

  • Very good implementation. It will be quite useful for me. Thank you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.