код для проверки домена на занятость?

olegalimov

Новичок
Здравствуйте, помогите найти или собрать один полный код для проверки домена на
занятость? мне нужно такой вид http://joomla-master.org/proverit-domen.html
по зонам .ru .su .com .net .org .biz .info .name .asia .bz .cc .in .me .mn .mobi .tv
.us .ws .tel .kz .РФ
С уважением к вам Олег.
webvm.ru
 

lart

Guest
Код там элементраный,
PHP:
ecex('whois -h [WHOIS_SERVER] [DOMAIN_NAME]');
Потом проверяешь, что вернул whois сервер.
Только нужно собрать базу whois серверов и какие ответы они отдают когда домен не зарегистрирован. (Они на разных серверах разные)
 

Активист

Активист
Команда форума
Код там элементраный,
PHP:
ecex('whois -h [WHOIS_SERVER] [DOMAIN_NAME]');
Потом проверяешь, что вернул whois сервер.
Только нужно собрать базу whois серверов и какие ответы они отдают когда домен не зарегистрирован. (Они на разных серверах разные)
Писал лет 7 назад:

PHP:
root@linux-debian-1:/var/www/dns.web.local/httpdocs# cat domains.expired.php
<?php
error_reporting(E_ALL);
ini_set("error_reporting", "on");
set_time_limit(60*60);

require_once("lib/whois.php");
require_once("lib/ispmanager.php");
require_once("lib/idna/idna_convert.class.php");

$idna = new idna_convert();
$whois = new whois();
$ispmanagerS001 = new ispmanager("serv001", "dnsreadonlyuser", "qwerty");
$ispmanagerS002 = new ispmanager("serv002", "dnsreadonlyuser", "qwerty");

$s001Domains = $ispmanagerS001->getDomains();
$s002Domains = $ispmanagerS002->getDomains();

$allDomains = array_merge($s001Domains, $s002Domains);

echo "<pre>";

//var_dump($whois->getExpiredDate("www.ru"));

//EXIT();

foreach ($allDomains as $domain) {
  
    if (preg_match("/in-addr.arpa$/i", $domain)) {
        continue;
      
    }
  
    flush();
  
  
    $fname = "tmp/{$domain}.txt";
  
    if (file_exists($fname) && filemtime($fname) > time()-60*60*24) {
        $expired = file_get_contents($fname);
        //echo "[Expired get's from file!]";
    } else {
        $expired = $whois->getExpiredDate($idna->encode($domain));
        if ($expired) {
            file_put_contents($fname, $expired);
        }
    }
  
  
    if ($expired === false) {
        echo "Domain: {$domain} expired: <font color=\"red\">failed</font> get data\n";
    } else {
        echo ((($expired-time())/60/60/24) <= 30 ? "<font color=\"red\"><b>" : "")."Domain: {$domain} expired: ".date("d/m/Y", $expired)." ".(int)(($expired-time())/60/60/24)." days left ".((($expired-time())/60/60/24) < 30 ? "NEED PROLONG</b></font>" : "")."\n";
    }
  
    flush();
    ob_flush();
}

?>
lib/whois.php
<?php
class whois {
    private $servers = array(
            "ru" => "whois.ripn.net",
            "su" => "whois.ripn.net",
            "xn--p1ai" => "whois.ripn.net",
            "mobi" => "whois.dotmobiregistry.net",
            "tv" => "tvwhois.verisign-grs.com",
            "com" => "whois.verisign-grs.com",
            "net" => "whois.verisign-grs.com",
            "org" => "whois.pir.org",
            "biz" => "whois.biz",
            "info" => "whois.afilias.net"
    );
      
      
    public function getExpiredDate($domainName) {

        if (!preg_match("/^(?:[a-z0-9\\.\\-]+\\.)?([a-z0-9\\-]+\\.([a-z]+|xn\\-\\-p1ai))$/i", trim($domainName), $match)) {
            return false;
        }


        $whoisInformation = $this->getWhoisInformartion(strtolower($match[1]), strtolower($match[2]));



        if ($whoisInformation === false || $whoisInformation === null) {
            return false;
        }

        return  $this->findDate($whoisInformation);



    }

    private function getWhoisInformartion($domain, $tld) {
        if (!isset($this->servers[$tld])) {
            return false;
        }

        sleep(3);

        try {
              
            $errno = $errstr = null;
              
            $fp = fsockopen($this->servers[$tld], 43, $errno, $errstr, 30);
              
            if (!$fp) {
                throw new Exception("Can't connect to socket [$errno] [$errstr]");
            }
              
            fwrite($fp, $domain."\n\r");
              
            $data = null;
              
            while (!feof($fp)) {
                $data .= fgets($fp, 512);
            }
              
            if ($data === null) {
                throw new Exception("Can't read data from server");
            }
              
            fclose($fp);
              
            return $data;
              
              
        } catch (Exception $e) {
            fclose($fp);
            //echo $e->getMessage();
            return false;
        }

    }

    private function findDate($data) {
        $date = false;

        //var_dump($data);

        if (preg_match("/Expiration\sDate:\s*(([0-9]+)\-([a-z]+)-([0-9]+))/i", $data, $match)) {
            $date = strtotime($match[1]);
        }

        if (preg_match("/Paid-till:\s*([0-9\.]+)/i", $data, $match)) {
            $date = strtotime(str_replace(".", "-", $match[1]));
        }

        if (preg_match("/Domain\s*Expiration\s*Date:\s*\t*([^\n\r]+)/i", $data, $match)) {
            $date = strtotime($match[1]);
        }


        //var_dump($date);

        return $date;

    }
}
?>

root@linux-debian-1:/var/www/dns.web.local/httpdocs# cat lib/ispmanager.php
<?php
class ispmanager {
    private $server = false;
    private $protocol = "https";
    private $suUser = false;
    private $suPassword = false;

  
    function __construct($server, $suUser, $suPassword) {
        //$ispmanagerDomainFuncXmlUrl = "https://serv001/manager/ispmgr?authinfo=root:qwerty&out=xml&func=domain";
        $this->server = $server;
        $this->suUser = $suUser;
        $this->suPassword = $suPassword;
    }
  
    public function setProtocol($protocol) {
        if ($protocol !== "http" && $protocol !== "https") {
            throw new Exception("Protocol set failed. Bad protocol specified");
        }
      
        $this->protocol = $protocol;
    }
  
    public function getDomains() {
        return $this->_getXmlFromDNSServer("{$this->protocol}://{$this->server}/manager/ispmgr?authinfo={$this->suUser}:{$this->suPassword}&out=xml&func=domain");
    }

    protected function _getXmlFromDNSServer($ispmanagerFunctionUrl) {
        $curlObject = curl_init($ispmanagerFunctionUrl);
        curl_setopt($curlObject, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curlObject, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curlObject, CURLOPT_HEADER, false);
        curl_setopt($curlObject, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($curlObject);
      
        if ($data === false) {
            throw new Exception("Error: can't get data from remote server", -1);
        }
  
        $xml = simplexml_load_string($data);
        $data = (array)$xml->xpath("/doc/elem/name");
  
        $return = arfray();
        foreach ($data as $name) {
            $return[] = (string)$name;
        }
        return $return;
    }
}
lib/idna/idna_convert.class.php
 

olegalimov

Новичок
Спасибо за быстрый ответ. Мне нужен один код с html формой для joomlы

Я переделал один код, но рф зону не ищет?

В чем моя ошибка?
PHP:
<?php
class whois {

var $port = 43;
var $MAXLEN = 1024;


var $QUERY_TYPE = "domain";
var $DEFAULT_SERVER = "whois.crsnic.net";

var $MAX_RETRIES = 3;
var $SLEEP_VAL = 1;
var $RETRY = 0;

var $FOUND = 0;
var $ERROR = 0;
var $DATA_MIN = 8;

var $DATA_COUNT = 0;

var $ORGANIZATION;
var $ORG_HANDLE;
var $ORG_ADDRESS;
var $DOMAIN_NAME;
var $DOMAIN_STATUS;
var $ADMIN;
var $TECH;
var $ZONE;
var $BILLING;
var $UPDATED;
var $CREATED;
var $DNS_NAME=array();
var $HANDLES;

var $IP="";
var $SERVER = array(
"com"=>"whois.crsnic.net",
"net"=>"whois.crsnic.net",
"edu"=>"whois.educause.net",
"org"=>"whois.publicinterestregistry.net",
"arpa"=>"whois.arin.net",
"ripe"=>"whois.ripe.net",
"mil"=>"whois.nic.mil",
"coop"=>"whois.nic.coop",
"museum"=>"whois.museum",
"biz"=>"whois.neulevel.biz",
"info"=>"whois.afilias.net",
"name"=>"whois.nic.name",
"me"=>"whois.nic.me",
"mn"=>"whois.nic.mn",
"mobi"=>"whois.dotmobiregistry.net",
"gov"=>"whois.nic.gov",
"aero"=>"whois.information.aero",
"asia"=>"whois.nic.asia",
"ns"=>"whois.internic.net",
"ip"=>"whois.ripe.net",
"ad"=>"whois.ripe.net",
"al"=>"whois.ripe.net",
"am"=>"whois.ripe.net",
"as"=>"whois.gdns.net",
"at"=>"whois.nic.at",
"au"=>"box2.aunic.net",
"az"=>"whois.ripe.net",
"ba"=>"whois.ripe.net",
"be"=>"whois.dns.be",
"bg"=>"whois.ripe.net",
"br"=>"whois.nic.br",
"by"=>"whois.ripe.net",
"bz"=>"whois2.afilias-grs.net",
"ca"=>"eider.cira.ca",
"cc"=>"whois.nic.cc",
"ch"=>"domex.switch.ch",
"ck"=>"whois.ck-nic.org.ck",
"cl"=>"nic.cl",
"cn"=>"whois.cnnic.net.cn",
"cx"=>"whois.nic.cx",
"cy"=>"whois.ripe.net",
"cz"=>"dc1.eunet.cz",
"de"=>"whois.denic.de",
"dk"=>"whois.dk-hostmaster.dk",
"do"=>"ns.nic.do",
"dz"=>"whois.ripe.net",
"ee"=>"whois.ripe.net",
"eg"=>"whois.ripe.net",
"es"=>"whois.ripe.net",
"fi"=>"whois.ripe.net",
"fo"=>"whois.ripe.net",
"fr"=>"winter.nic.fr",
"ga"=>"whois.ripe.net",
"gb"=>"whois.ripe.net",
"ge"=>"whois.ripe.net",
"gl"=>"whois.ripe.net",
"gm"=>"whois.ripe.net",
"gr"=>"whois.ripe.net",
"gs"=>"whois.adamsnames.tc",
"hk"=>"whois.hkdnr.net.hk",
"hr"=>"whois.ripe.net",
"hu"=>"whois.nic.hu",
"id"=>"muara.idnic.net.id",
"ie"=>"whois.domainregistry.ie",
"il"=>"whois.isoc.org.il",
"in"=>"whois.ncst.ernet.in",
"is"=>"horus.isnic.is",
"it"=>"whois.nic.it",
"jo"=>"whois.ripe.net",
"jp"=>"whois.nic.ad.jp",
"kg"=>"whois.domain.kg",
"kh"=>"whois.nic.net.kh",
"kr"=>"whois.krnic.net",
"kz"=>"whois.nic.kz",
"la"=>"whois.nic.la",
"li"=>"domex.switch.ch",
"lk"=>"arisen.nic.lk",
"lt"=>"ns.litnet.lt",
"lu"=>"whois.dns.lu",
"lv"=>"whois.ripe.net",
"ma"=>"whois.ripe.net",
"mc"=>"whois.ripe.net",
"md"=>"whois.ripe.net",
"mm"=>"whois.nic.mm",
"ms"=>"whois.adamsnames.tc",
"mt"=>"whois.ripe.net",
"mx"=>"whois.nic.mx",
"nl"=>"whois.domain-registry.nl",
"no"=>"ask.norid.no",
"nu"=>"whois.worldnames.net",
"nz"=>"akl-iis.domainz.net.nz",
"pl"=>"nazgul.nask.waw.pl",
"pt"=>"whois.ripe.net",
"ro"=>"whois.rotld.ro",
"ru"=>"whois.ripn.net",
"рф"=>"whois.ripn.net",
"se"=>"ear.nic-se.se",
"sg"=>"qs.nic.net.sg",
"sh"=>"whois.nic.sh",
"si"=>"whois.arnes.si",
"sk"=>"whois.ripe.net",
"sm"=>"whois.ripe.net",
"st"=>"whois.nic.st",
"su"=>"whois.ripn.net",
"tc"=>"whois.adamsnames.tc",
"tf"=>"whois.adamsnames.tc",
"th"=>"whois.thnic.net",
"tj"=>"whois.nic.tj",
"tn"=>"whois.ripe.net",
"to"=>"whois.tonic.to",
"tr"=>"whois.ripe.net",
"tw"=>"whois.twnic.net",
"tv"=>"whois.nic.tv",
"tel"=>"whois.nic.tel",
"ua"=>"whois.net.ua",
"uk"=>"whois.nic.uk",
"us"=>"whois.nic.us",
"va"=>"whois.ripe.net",
"vg"=>"whois.adamsnames.tc",
"ws"=>"whois.worldsite.ws",
"yu"=>"whois.ripe.net",
"za"=>"apies.frd.ac.za",
"xn--p1ag"=>"ru.whois.i-dns.net",
"xn--p1ag"=>"ru.whois.i-dns.net",
"xn--j1ae"=>"whois.i-dns.net",
"xn--e1ap"=>"whois.i-dns.net",
"xn--c1av"=>"whois.i-dns.net",
"net.ru"=>"whois.ripn.net",
"org.ru"=>"whois.ripn.net",
"pp.ru"=>"whois.ripn.net",
"spb.ru"=>"whois.relcom.ru",
"msk.ru"=>"whois.relcom.ru",
"ru.net"=>"whois.relcom.ru",
"yes.ru"=>"whois.regtime.net",
"uk.com"=>"whois.centralnic.com",
"uk.net"=>"whois.centralnic.com",
"gb.com"=>"whois.centralnic.com",
"gb.net"=>"whois.centralnic.com",
"eu.com"=>"whois.centralnic.com"
);
var $TLD;
var $RAWINFO;
var $DNSINFO;
//обращение к WHOIS серверу
function connect ($server)
{
while($this->RETRY <= $this->MAX_RETRIES)
{
$ptr=fsockopen($server, $this->port);
if($ptr>0)
{
$this->ERROR=0;
return($ptr);
}else
{
$this->ERROR++;
$this->RETRY++;
sleep($this->SLEEP_VAL);
}
}
}

function rawlookup ($query)
{
$array=array();
$this->FOUND=1;
$query=strtolower(trim($query));
if(strlen($query)<=2)
{
$this->ERROR=1;
return($array);
}

$server=$this->DEFAULT_SERVER;
if($this->QUERY_TYPE=="domain")
{
ereg(".+\.(.+)\.{0,1}",$query,$backrefs);
if(isset($backrefs[1]) && strlen($backrefs[1])>0 && isset($this->SERVER[$backrefs[1]]))
{
$this->TLD=$backrefs[1];
$server=$this->SERVER[$this->TLD];
}

}
$ptr=$this->connect($server);
if($ptr)
{
$query .= "\n";
fputs($ptr, $query);
$i=0;
while(!feof($ptr))
{
$array[$i]=fgets($ptr,$this->MAXLEN);
$this->DATA_COUNT+=strlen(trim($array[$i]));
if(eregi("No match for", $array[$i]) || eregi("Not found", $array[$i]) || eregi("No entries found for", $array[$i]))
{
$this->FOUND=0;
break;
}
if(eregi("WHOIS database is down",$array[$i]) || eregi("Please wait a while and try again",$array[$i]))
{
$this->ERROR=1;
$this->FOUND=0;
break;
}
$i++;
}
fclose($ptr);
if($this->DATA_COUNT>$this->DATA_MIN && $this->ERROR==0 && $this->FOUND==1)
{
return($array);
}
}
return (array());
}


function parsezone ($array)
{
$result=array();
if(!isset($array) || !is_array($array) || count($array)<=3)
{
$this->FOUND=0;
return $result;
}
$cnt=count($array);
$rescnt=0;
$i=0;
$isinfo=true;
while($i<$cnt)
{
if(!$isinfo)
{
$str=trim($array[$i]);
$result[$rescnt]=$str;

if(eregi("NAME SERVER", $str) || eregi("NSERVER", $str))
{
$str=trim(substr($str, strpos($str, ":")+1));
if($pos=strpos($str, " "))
{
$str=substr($str, 0, $pos);
}
if(substr($str, -1)==".")
{
$str=substr($str, 0, -1);
}
$this->DNS_NAME[]=strtolower($str);
}
$rescnt++;
}
if(trim($array[$i])=="" && $isinfo)
{
$isinfo=false;
}
$i++;
}
return $result;
}

function zonelookup ($query)
{
$query=trim($query);
$this->RAWINFO=$this->rawlookup($query);
if($this->FOUND)
{
$this->RAWINFO=$this->parsezone($this->RAWINFO);
}
if($this->FOUND==0)
{
return;
}
if($this->dns_lookup($query))
{
$this->IP=gethostbyname($query);
$this->build_dns($query);
}
}

function build_dns($query)
{
$cnt=0;
// $temp=dns_get_record($query, "NS");
foreach($this->DNS_NAME AS $dns)
{
$this->DNSINFO[$cnt]="NS: ".$dns."\tinternet address = ".gethostbyname($dns);
$cnt++;
}
if(getmxrr($query, $temp))
{
foreach($temp AS $dns)
{
$this->DNSINFO[$cnt]="MX: ".$dns."\tinternet address = ".gethostbyname($dns);
$cnt++;
}
}

}
function dns_lookup($query)
{
return checkdnsrr($query,"ANY");
}


};

?><html>
<head>
<title>Проверка доменного имени</title>
</head>
<body>
<form method="post">
<form class="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="domain">
  <table width=800px bgcolor="#2D64C3">
  <tr>
    <td  style="font-size:18px; color:#FFFFFF; font-family: Georgia, "Times New Roman", Times, serif;"
    width=195px; nowrap="nowrap">Введите имя домена:</td>
<td width=144px;><input name="domain" type="text" placeholder="Пример: yandex"/></td>
<td width=85px;><select size="1" name="TLD[]">
  <option name="TLD[]" value=".ru" >.RU</option>
  <option name="TLD[]" value=".рф">.РФ</option>
  <option name="TLD[]" value=".cc">.CC</option>
  <option name="TLD[]" value=".in">.IN</option>
  <option name="TLD[]" value=".me">.ME</option>
  <option name="TLD[]" value=".mn">.MN</option>
  <option name="TLD[]" value=".su">.SU</option>
  <option name="TLD[]" value=".ws">.WS</option>
  <option name="TLD[]" value=".tv">.TV</option>
  <option name="TLD[]" value=".kz">.KZ</option>
  <option name="TLD[]" value=".bz">.BZ</option>
  <option name="TLD[]" value=".us">.US</option>
  <option name="TLD[]" value=".com">.COM</option>
  <option name="TLD[]" value=".net">.NET</option>
  <option name="TLD[]" value=".org">.ORG</option>
  <option name="TLD[]" value=".biz">.BIZ</option>
  <option name="TLD[]" value=".tel">.TEL</option>
  <option name="TLD[]" value=".info">.INFO</option>
  <option name="TLD[]" value=".name">.NAME</option>
  <option name="TLD[]" value=".asia">.ASIA</option>
  <option name="TLD[]" value=".mobi">.MOBI</option>

</select></td>
<td  style="font-size:18px; color:#FFFFFF; font-family: Georgia, "Times New Roman", Times, serif;"
width=376px;><input type="submit" name="submitBtn" value="Проверить"/>
<?
if(isset($_POST["domain"]) && strlen($_POST["domain"])>0 && isset($_POST["TLD"]) && is_array($_POST["TLD"]))
{
$target=$_POST["domain"];
$whois=new whois();
foreach($_POST['TLD'] AS $tldz)
{
echo($target.$tldz." - ");
$whois->zonelookup($target.$tldz);
if($whois->ERROR==0)
{
if(is_array($whois->RAWINFO) && count($whois->RAWINFO)>7 && $whois->FOUND==1)
{
echo("Занят!");
}else
{
echo("Свободен!");
}
}else
{
echo("Ошибка запроса");
}
echo("<br>");
}
}
?>
</td>
</table>
</form>
</body>
</html>
</body>
</html>
 
Последнее редактирование:

Активист

Активист
Команда форума
Не, на этом форуме вы врятли получите готовое решение. Тут принято обсуждать решения, решать проблемы, учиться.
 

olegalimov

Новичок
Добрые люди помогите!

Как поменять запрос на кириллицу имени домена и в зоне?
PHP:
  <option name="TLD[]" value=".xn--p1ai" >.РФ</option>
if(isset($_POST["domain"]) && strlen($_POST["domain"])>0 && isset($_POST["TLD"]) && is_array($_POST["TLD"]))
 

fixxxer

К.О.
Партнер клуба
Активист, а зачем ручное кодирование карты? Разве нельзя это автоматизировать?
В большинстве случаев можно просто использовать сервер $zoneName.whois-servers.net, а пробить только исключения.

Стандартная команда whois так и делает.

Есть еще веселые зоны, где вообще whois-сервера по 43 порту нифига нет, и надо дергать веб-апи. :)
 

antson

Новичок
Партнер клуба
olegalimov, трабла whois в том, что ответ сервера собственно не стандартизирован. грубо в стандарте написано, что надо слушать 43 порт получать из него текст - плаин строку и отвечать тоже плаин текстом в котором около 20 возможных префиксов строк. А вот что там написано не оговорено.

Далее вхуиз не полная гарантия. Всегда есть временные лаги.
Истина для рушки и рф у РИПНа . Даже регистраторы на стадии заказа не будут делать проверку через ЕПП протокол (так как у них почасовые квоты на обращения).
И все равно пока не зарегится домен ни чего еще не известно.

Например . Чел хочет купить домен на аукционе у регистратора.
В этом случае регистратор постарается послать запрос в момент максимально близкий после освобождения его коордиоционный центром.
А другой чел у другого регистратора подгадал через партнерское апи момент так , что его запрос оказался в очереди раньше.
В результате домен достался тому кто заплатил 90 рублей , а готовый отдать Х килорублей в пролете.
 

antson

Новичок
Партнер клуба
кстати регистратор не обязан держать вхуиз на 43 поту. Достаточно http формы.
И для рунета требование, что должна быть на этой форме ссылка или описание правил пользования (по сути сколько запросов можно делать с одного ИП)
 
Сверху