1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

PHP Whois Script

Discussion in 'PHP' started by fsmedia, Apr 18, 2006.

  1. #1
    Does anyone know how to get a script like the one that http://whois.sc uses? I want to display information similar to that and to be able to use somthing like whois.sc/domain.com and have it do a whois directly from there. Any ideas?
     
    fsmedia, Apr 18, 2006 IP
  2. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #2
    The hard part would be finding a source for the actual whois data without scraping.
     
    exam, Apr 18, 2006 IP
  3. digitalpoint

    digitalpoint Overlord of no one Staff

    Messages:
    38,333
    Likes Received:
    2,613
    Best Answers:
    462
    Trophy Points:
    710
    Digital Goods:
    29
    #3
    I just now made this (really) since I know how whois works for the most part...
    <?php
    
    	function whois ($query, $server = 'whois.internic.net') {
    		$handle = fsockopen ($server, 43);
    		fwrite ($handle, "$query\n");
    		while (!feof ($handle)) {
    			$results .= fread ($handle, 102400);
    		}
    		if ($server == 'whois.internic.net') {
    			preg_match ('#Whois Server: (.*)#', $results, $matches);
    			$results = whois ($query, $matches[1]);
    		}
    		return $results;
    	}
    
    	echo whois ($_REQUEST['domain']);
    	
    ?>
    PHP:
    That should work for any .com, .net and .org domain if you make the query whois.php?domain=yourdomain.com (whois.php being the name of the script). That should get you started.
     
    digitalpoint, Apr 18, 2006 IP
  4. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #4
    A long time ago I used whois.internic.net, but I don't think it works anymore. They also have some rules about automated queries too. You can send the query to http://reports.internic.net/cgi/whois but they'll (temporarily) block your IP if you do more than a couple queries w/o a browser UA.
     
    exam, Apr 18, 2006 IP
  5. digitalpoint

    digitalpoint Overlord of no one Staff

    Messages:
    38,333
    Likes Received:
    2,613
    Best Answers:
    462
    Trophy Points:
    710
    Digital Goods:
    29
    #5
    whois.internic.net is still the master whois server as far as I know. It's the one that tells you which registrar's whois server to hit for the actual data (since each registrar has their own whois server).

    I've never heard of people being blocked from internic.net's whois server, but individual registrars will block you based on their own policies, so...
     
    digitalpoint, Apr 18, 2006 IP
  6. fsmedia

    fsmedia Prominent Member

    Messages:
    5,163
    Likes Received:
    262
    Best Answers:
    0
    Trophy Points:
    390
    #6
    Awesome, thanks Shawn. I'll grab that code and test it out -- I'll see how I can get it working how I want it to. You rock!

    EDIT:
    Which version of PHP was this written for? We're running 5.1.2
     
    fsmedia, Apr 18, 2006 IP
  7. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #7
    Shawn, you're right and I'm wrong.

    Internic just passes you off to the appropriate register. It kicks back the warning that fsockopen failed because the registrar refused the connection (apparently). I got this working, but the only whois servers that I could get a response from were Netsol, Omis, Namemark & Tucows. (That's probably why Namestalker didn't work for a lot of my domains)-- This means that for a lot of domain names this will fail. Do you know of any other way to get data from the other registrars who don't want to "play fair"?
     
    exam, Apr 18, 2006 IP
  8. digitalpoint

    digitalpoint Overlord of no one Staff

    Messages:
    38,333
    Likes Received:
    2,613
    Best Answers:
    462
    Trophy Points:
    710
    Digital Goods:
    29
    #8
    fsockopen() should work in PHP3 and higher.

    When I tested it, it was PHP 4.4.2.
     
    digitalpoint, Apr 18, 2006 IP
  9. fsmedia

    fsmedia Prominent Member

    Messages:
    5,163
    Likes Received:
    262
    Best Answers:
    0
    Trophy Points:
    390
    #9
    Odd. It simply threw A LOT of errors when I was trying it. I'll look at later when I have more time. Thanks again Shawn.
     
    fsmedia, Apr 18, 2006 IP
  10. anjanesh

    anjanesh Well-Known Member

    Messages:
    343
    Likes Received:
    7
    Best Answers:
    0
    Trophy Points:
    165
    #10
    If using Linux you can also try :
    
    $domain = "domain.com";
    $output = shell_exec("whois $domain");
    echo $output;
    
    PHP:
    If you are on Windows you can use Win32Whois
     
    anjanesh, Apr 18, 2006 IP
    exam likes this.
  11. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #11
    Good workaround. Thanks.
     
    exam, Apr 19, 2006 IP
  12. dataman

    dataman Peon

    Messages:
    94
    Likes Received:
    8
    Best Answers:
    0
    Trophy Points:
    0
    #12
    A remote PHP developers whois!

    returns an array of data (date indexes are gmdate format, can be used in the PHP date(); function)

    
    <?
    	// must begin with '='
    
    	$domain = '=digitalpoint.com';
    
    	$out = unserialize ( file_get_contents ( 'http://www.ya-right.com/whois.php?d=' . urlencode ( $domain ) ) );
    
    	print_r ( $out );
    
    ?>
    
    PHP:

    dm!
     
    dataman, Apr 19, 2006 IP
  13. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #13
    Returns a 404 for me.
     
    exam, Apr 19, 2006 IP
  14. anjanesh

    anjanesh Well-Known Member

    Messages:
    343
    Likes Received:
    7
    Best Answers:
    0
    Trophy Points:
    165
  15. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #15
    exam, Apr 19, 2006 IP
  16. Will.Spencer

    Will.Spencer NetBuilder

    Messages:
    14,789
    Likes Received:
    1,040
    Best Answers:
    0
    Trophy Points:
    375
    #16
    I have no recollection where I originally found this one:
    
    <form name="form1" method="post" action="whois.php">
      Domain: <input type="text" name="dom">
      <input type="submit" name="Submit" value="Submit">
    </form>
    <?
    if ($dom){
            include "./whois.inc";
            $whoisresult = lookup($dom);
            $isavail = $whoisresult[0]; // Contains "1" is it's available, blank if it's registered
            $whotext = $whoisresult[1]; // Contains the full response from the server.
            #The PRE tags are there to display the results in web browsers without replacing \n with <br>..its just cleaner and quicker that way. ;)
            if ($isavail=="1"){
                    print "<b>This domain is available!</b>";
            }
                    else
            {
                    print "<b>This domain has been registered.</b>";
            }
            print "<pre>".$whotext."</pre>";
    }
    ?>
    
    Code (markup):
     
    Will.Spencer, Apr 19, 2006 IP
  17. digitalpoint

    digitalpoint Overlord of no one Staff

    Messages:
    38,333
    Likes Received:
    2,613
    Best Answers:
    462
    Trophy Points:
    710
    Digital Goods:
    29
    #17
    Uhm... I think that is missing the important part (the whois.inc file). :)
     
    digitalpoint, Apr 19, 2006 IP
  18. exam

    exam Peon

    Messages:
    2,434
    Likes Received:
    120
    Best Answers:
    0
    Trophy Points:
    0
    #18
    Did you purposely omit whois.inc as some kind of mean cruel joke? :mad: j/k EDIT: Slow down Shawn and give me a chance :D
     
    exam, Apr 19, 2006 IP
  19. Will.Spencer

    Will.Spencer NetBuilder

    Messages:
    14,789
    Likes Received:
    1,040
    Best Answers:
    0
    Trophy Points:
    375
    #19
    Err... I was just making sure you were paying attention... yeah... yeah... that's it...
    
    <?
    function get_whois_info($domain){
    $whoisservers=array(
            array("ac","whois.nic.ac","No match"),
                    array("ac.cn","whois.cnnic.net.cn","No entries found"),
                    array("ac.jp","whois.nic.ad.jp","No match"),
                    array("ac.uk","whois.ja.net","no entries"),
                    array("ad.jp","whois.nic.ad.jp","No match"),
                    array("adm.br","whois.nic.br","No match"),
                    array("adv.br","whois.nic.br","No match"),
                    array("aero","whois.information.aero","is available"),
                    array("ag","whois.nic.ag","does not exist"),
                    array("agr.br","whois.nic.br","No match"),
                    array("ah.cn","whois.cnnic.net.cn","No entries found"),
                    array("al","whois.ripe.net","No entries found"),
                    array("am.br","whois.nic.br","No match"),
                    array("arq.br","whois.nic.br","No match"),
                    array("at","whois.nic.at","nothing found"),
                    array("au","whois.aunic.net","No Data Found"),
                    array("art.br","whois.nic.br","No match"),
                    array("as","whois.nic.as","Domain Not Found"),
                    array("asn.au","whois.aunic.net","No Data Found"),
                    array("ato.br","whois.nic.br","No match"),
                    array("be","whois.geektools.com","No such domain"),
                    array("bg","whois.digsys.bg","does not exist"),
                    array("bio.br","whois.nic.br","No match"),
                    array("biz","whois.biz","Not found"),
                    array("bj.cn","whois.cnnic.net.cn","No entries found"),
                    array("bmd.br","whois.nic.br","No match"),
                    array("br","whois.registro.br","No match"),
                    array("ca","whois.cira.ca","AVAIL"),
                    array("cc","whois.nic.cc","No match"),
                    array("cd","whois.cd","No match"),
                    array("ch","whois.nic.ch","We do not have an entry"),
                    array("cim.br","whois.nic.br","No match"),
                    array("ck","whois.ck-nic.org.ck","No entries found"),
                    array("cl","whois.nic.cl","no existe"),
                    array("cn","whois.cnnic.net.cn","no matching record"),
                    array("cng.br","whois.nic.br","No match"),
                    array("cnt.br","whois.nic.br","No match"),
                    array("com","whois.verisign-grs.net","No match"),
                    array("com.au","whois.aunic.net","No Data Found"),
                    array("com.br","whois.nic.br","No match"),
                    array("com.cn","whois.cnnic.net.cn","no matching record"),
                    array("com.eg","whois.ripe.net","No entries found"),
                    array("com.hk","whois.hknic.net.hk","No Match for"),
                    array("com.mx","whois.nic.mx","No Encontradas"),
                    array("com.ru","whois.ripn.ru","No entries found"),
                    array("com.tw","whois.twnic.net","NO MATCH TIP"),
                    array("conf.au","whois.aunic.net","No entries found"),
                    array("co.jp","whois.nic.ad.jp","No match"),
                    array("co.uk","whois.nic.uk","No match for"),
                    array("cq.cn","whois.cnnic.net.cn","No entries found"),
                    array("csiro.au","whois.aunic.net","No Data Found"),
                    array("cx","whois.nic.cx","No match"),
                    array("cz","whois.nic.cz","No data found"),
                    array("de","whois.denic.de","No entries found"),
                    array("dk","whois.dk-hostmaster.dk","No entries found"),
                    array("ecn.br","whois.nic.br","No match"),
                    array("ee","whois.eenet.ee","NOT FOUND"),
                    array("edu","whois.verisign-grs.net","No match"),
                    array("edu.au","whois.aunic.net","No Data Found"),
                    array("edu.br","whois.nic.br","No match"),
                    array("eg","whois.ripe.net","No entries found"),
                    array("es","whois.ripe.net","No entries found"),
                    array("esp.br","whois.nic.br","No match"),
                    array("etc.br","whois.nic.br","No match"),
                    array("eti.br","whois.nic.br","No match"),
                    array("eun.eg","whois.ripe.net","No entries found"),
                    array("emu.id.au","whois.aunic.net","No Data Found"),
                    array("eng.br","whois.nic.br","No match"),
                    array("far.br","whois.nic.br","No match"),
                    array("fi","whois.ripe.net","No entries found"),
                    array("fj","whois.usp.ac.fj",""),
                    array("fj.cn","whois.cnnic.net.cn","No entries found"),
                    array("fm.br","whois.nic.br","No match"),
                    array("fnd.br","whois.nic.br","No match"),
                    array("fot.br","whois.nic.br","No match"),
                    array("fst.br","whois.nic.br","No match"),
                    array("fr","whois.nic.fr","No entries found"),
                    array("g12.br","whois.nic.br","No match"),
                    array("gd.cn","whois.cnnic.net.cn","No entries found"),
                    array("ge","whois.ripe.net","no entries found"),
                    array("ggf.br","whois.nic.br","No match"),
                    array("gl","whois.ripe.net","no entries found"),
                    array("gr","whois.ripe.net","no entries found"),
                    array("gr.jp","whois.nic.ad.jp","No match"),
                    array("gs","whois.adamsnames.tc","is not registered"),
                    array("gov","whois.nic.gov","No entries found"),
                    array("gs.cn","whois.cnnic.net.cn","No entries found"),
                    array("gov.au","whois.aunic.net","No Data Found"),
                    array("gov.br","whois.nic.br","No match"),
                    array("gov.cn","whois.cnnic.net.cn","No entries found"),
                    array("gov.hk","whois.hknic.net.hk","No Match for"),
                    array("gob.mx","whois.nic.mx","No Encontradas"),
                    array("gs","whois.adamsnames.tc","is not registered"),
                    array("gz.cn","whois.cnnic.net.cn","No entries found"),
                    array("gx.cn","whois.cnnic.net.cn","No entries found"),
                    array("he.cn","whois.cnnic.net.cn","No entries found"),
                    array("ha.cn","whois.cnnic.net.cn","No entries found"),
                    array("hb.cn","whois.cnnic.net.cn","No entries found"),
                    array("hi.cn","whois.cnnic.net.cn","No entries found"),
                    array("hl.cn","whois.cnnic.net.cn","No entries found"),
                    array("hn.cn","whois.cnnic.net.cn","No entries found"),
                    array("hm","whois.registry.hm","(null)"),
                    array("hk","whois.hknic.net.hk","No Match for"),
                    array("hk.cn","whois.cnnic.net.cn","No entries found"),
                    array("hu","whois.ripe.net","MAXCHARS:500"),
                    array("id.au","whois.aunic.net","No Data Found"),
                    array("ie","whois.domainregistry.ie","no match"),
                    array("ind.br","whois.nic.br","No match"),
                    array("imb.br","whois.nic.br","No match"),
                    array("inf.br","whois.nic.br","No match"),
                    array("info","whois.afilias.info","Not found"),
                    array("info.au","whois.aunic.net","No Data Found"),
                    array("it","whois.nic.it","No entries found"),
                    array("idv.tw","whois.twnic.net","NO MATCH TIP"),
                    array("int","whois.iana.org","not found"),
                    array("is","whois.isnic.is","No entries found"),
                    array("il","whois.isoc.org.il","No data was found"),
                    array("jl.cn","whois.cnnic.net.cn","No entries found"),
                    array("jor.br","whois.nic.br","No match"),
                    array("jp","whois.nic.ad.jp","No match"),
                    array("js.cn","whois.cnnic.net.cn","No entries found"),
                    array("jx.cn","whois.cnnic.net.cn","No entries found"),
                    array("kr","whois.krnic.net","is not registered"),
                    array("la","whois.nic.la","NO MATCH"),
                    array("lel.br","whois.nic.br","No match"),
                    array("li","whois.nic.ch","We do not have an entry"),
                    array("lk","whois.nic.lk","No domain registered"),
                    array("ln.cn","whois.cnnic.net.cn","No entries found"),
                    array("lt","ns.litnet.lt","No matches found"),
                    array("lu","whois.dns.lu","No entries found"),
                    array("lv","whois.ripe.net","no entries found"),
                    array("ltd.uk","whois.nic.uk","No match for"),
                    array("mat.br","whois.nic.br","No match"),
                    array("mc","whois.ripe.net","No entries found"),
                    array("me.uk","whois.nic.uk","No match for"),
                    array("med.br","whois.nic.br","No match"),
                    array("mil","whois.nic.mil","No match"),
                    array("mil.br","whois.nic.br","No match"),
                    array("mn","whois.nic.mn","Domain not found"),
                    array("mo.cn","whois.cnnic.net.cn","No entries found"),
                    array("ms","whois.adamsnames.tc","is not registered"),
                    array("mus.br","whois.nic.br","No match"),
                    array("mx","whois.nic.mx","No Encontradas"),
                    array("name","whois.nic.name","No match."),
                    array("ne.jp","whois.nic.ad.jp","No match"),
                    array("net","whois.verisign-grs.net","No match"),
                    array("net.au","whois.aunic.net","No Data Found"),
                    array("net.br","whois.nic.br","No match"),
                    array("net.cn","whois.cnnic.net.cn","No entries found"),
                    array("net.eg","whois.ripe.net","No entries found"),
                    array("net.hk","whois.hknic.net.hk","No Match for"),
                    array("net.lu","whois.dns.lu","No entries found"),
                    array("net.mx","whois.nic.mx","No Encontradas"),
                    array("net.uk","whois.nic.uk","No match for "),
                    array("net.ru","whois.ripn.ru","No entries found"),
                    array("net.tw","whois.twnic.net","NO MATCH TIP"),
                    array("nl","whois.domain-registry.nl","is not a registered domain"),
                    array("nm.cn","whois.cnnic.net.cn","No entries found"),
                    array("no","whois.norid.no","no matches"),
                    array("nom.br","whois.nic.br","No match"),
                    array("not.br","whois.nic.br","No match"),
                    array("ntr.br","whois.nic.br","No match"),
                    array("nu","whois.nic.nu","NO MATCH for"),
                    array("nx.cn","whois.cnnic.net.cn","No entries found"),
                    array("nz","whois.domainz.net.nz","220 Available"),
                    array("plc.uk","whois.nic.uk","No match for"),
                    array("odo.br","whois.nic.br","No match"),
                    array("oop.br","whois.nic.br","No match"),
                    array("or.jp","whois.nic.ad.jp","No match"),
                    array("org","whois.pir.org","NOT FOUND"),
                    array("org.au","whois.aunic.net","No Data Found"),
                    array("org.br","whois.nic.br","No match"),
                    array("org.cn","whois.cnnic.net.cn","No entries found"),
                    array("org.hk","whois.hknic.net.hk","No Match for"),
                    array("org.lu","whois.dns.lu","No entries found"),
                    array("org.ru","whois.ripn.ru","No entries found"),
                    array("org.tw","whois.twnic.net","NO MATCH TIP"),
                    array("org.uk","whois.nic.uk","No match for"),
                    array("pl","nazgul.nask.waw.pl","does not exists"),
                    array("plc.uk","whois.nic.uk","No match for"),
                    array("pp.ru","whois.ripn.ru","No entries found"),
                    array("ppg.br","whois.nic.br","No match"),
                    array("pro.br","whois.nic.br","No match"),
                    array("psi.br","whois.nic.br","No match"),
                    array("psc.br","whois.nic.br","No match"),
                    array("pt","whois.ripe.net","No entries found"),
                    array("qh.cn","whois.cnnic.net.cn","No entries found"),
                    array("qsl.br","whois.nic.br","No match"),
                    array("rec.br","whois.nic.br","No match"),
                    array("ro","whois.rotld.ro","No entries found"),
                    array("ru","whois.ripn.ru","No entries found"),
                    array("sc.cn","whois.cnnic.net.cn","No entries found"),
                    array("sd.cn","whois.cnnic.net.cn","No entries found"),
                    array("se","whois.nic-se.se","No data found"),
                    array("sg","whois.nic.net.sg","NO entry found"),
                    array("sh","whois.nic.sh","No match for"),
                    array("sh.cn","whois.cnnic.net.cn","No entries found"),
                    array("si","whois.arnes.si","No entries found"),
                    array("sk","whois.ripe.net","no entries found"),
                    array("slg.br","whois.nic.br","No match"),
                    array("sm","whois.ripe.net","no entries found"),
                    array("sn.cn","whois.cnnic.net.cn","No entries found"),
                    array("srv.br","whois.nic.br","No match"),
                    array("st","whois.nic.st","No entries found"),
                    array("sx.cn","whois.cnnic.net.cn","No entries found"),
                    array("tc","whois.adamsnames.tc","is not registered"),
                    array("th","whois.nic.uk","No entries found"),
                    array("tj.cn","whois.cnnic.net.cn","No entries found"),
                    array("tld.uk","whois.nic.uk","No match for"),
                    array("tmp.br","whois.nic.br","No match"),
                    array("to","whois.tonic.to","No match"),
                    array("tr","whois.ripe.net","Not found in database"),
                    array("trd.br","whois.nic.br","No match"),
                    array("tur.br","whois.nic.br","No match"),
                    array("tv","whois.tv","MAXCHARS:75"),
                    array("tv.br","whois.nic.br","No match"),
                    array("tw","whois.twnic.net","NO MATCH TIP"),
                    array("tw.cn","whois.cnnic.net.cn","No entries found"),
                    array("uk","whois.thnic.net","No match for"),
                    array("us","whois.nic.us","Not found:"),
                    array("va","whois.ripe.net","No entries found"),
                    array("vet.br","whois.nic.br","No match"),
                    array("vg","whois.adamsnames.tc","is not registered"),
                    array("wattle.id.au","whois.aunic.net","No Data Found"),
                    array("ws","whois.worldsite.ws","No match for"),
                    array("xj.cn","whois.cnnic.net.cn","No entries found"),
                    array("xz.cn","whois.cnnic.net.cn","No entries found"),
                    array("yn.cn","whois.cnnic.net.cn","No entries found"),
                    array("zlg.br","whois.nic.br","No match"),
                    array("zj.cn","whois.cnnic.net.cn","No entries found"),
                    array("fo","whois.ripe.net","no entries found")
            );
            $whocnt = count($whoisservers);
            for ($x=0;$x<$whocnt;$x++){
                    $artld = $whoisservers[$x][0];
                    $tldlen = intval(0 - strlen($artld));
                    if (substr($domain, $tldlen) == $artld) {
                            $out[0] = $whoisservers[$x][1];
                            $out[1] = $whoisservers[$x][2];
                            return $out;
                    }
            }
            return $out;
    }
    
    function lookup($dom){
            $whoinf = get_whois_info($dom);
            $lusrv = $whoinf[0];
            $notfndtxt = $whoinf[1];
    
            if (!$lusrv) return "";
    
            $fp = fsockopen($lusrv,43);
            fputs($fp, "$dom\r\n");
            $string="";
            while(!feof($fp)){
                    $string.= fgets($fp,128);
            }
            fclose($fp);
    
            $reg = "/Whois Server: (.*?)\n/i";
            preg_match_all($reg, $string, $matches);
            $secondtry = $matches[1][0];
    
            if ($secondtry){
                    $fp = fsockopen($secondtry,43);
                    fputs($fp, "$dom\r\n");
                    $string="";
                    while(!feof($fp)){
                            $string.=fgets($fp,128);
                    }
                    fclose($fp);
            }
            if (stristr($string, $notfndtxt)) $data[0] = "1";
            $data[1] = $string;
            return $data;
    }
    ?>
    Code (markup):
     
    Will.Spencer, Apr 19, 2006 IP
  20. dataman

    dataman Peon

    Messages:
    94
    Likes Received:
    8
    Best Answers:
    0
    Trophy Points:
    0
    #20
    dataman, Apr 20, 2006 IP