PHP: Проверка на expiration date?

Poltargaista

Active Member
Привет колеги!

Изпитвам някои затруднения с "подкарването" и донаписването на код, който да проверява WhoIs информацията на даден домейн и после да извежда само определени данни от нея.

Единия код, който намерих:
PHP:
<?php
function getwhois($domain, $tld) {
require_once("whois.class.php");
$whois = new Whois();
if( !$whois->ValidDomain($domain.'.'.$tld) ) {
return 'Sorry, the domain is not valid or not supported.'; }
if( $whois->Lookup($domain.'.'.$tld) ) {
return $whois->GetData(1); }
else { return 'Sorry, an error occurred.'; } }
$domain = trim($_REQUEST['domain']);
$dot = strpos($domain, '.');
$sld = substr($domain, 0, $dot);
$tld = substr($domain, $dot+1);
$whois = getwhois($sld, $tld);
echo "";
echo $whois;
echo "";
?>
Но нямам class.php. А и до колкото виждам то извежда цялата информация от WhoIs-а, а не само конкретни неща (примерно: Registar & Expiration Date).

Другия код е този:

PHP:
<?php
set_time_limit(0);
ob_start();

include 'inc/dnservers.php';

function save_file($status) 
{
    global $filename, $domain, $extension;
    
    $domain = trim($domain);
    
    $file_handle = fopen($filename . "_$status.txt", 'a+') or trigger_error('Cannot open or create file (chmod?)', E_USER_WARNING);
    
    if($status == 'invalid' && $extension == 'org') { $status .= ' (.org WHOIS prevents request)'; }
                
    if(!fwrite($file_handle, $domain . " is $status\n"))
    {
        trigger_error('Results for ' . $domain . ' could not be written.', E_USER_WARNING);
    }
    
    fclose($file_handle);    
}

function return_status($domain, $status)
{    
    global $extension, $filename;

    
    $file = $filename;
    $domain = trim($domain);
    
    if(isset($_POST['save']))
    {
            save_file( $status );
    }
    else
    {    
        $color = ($status == 'available') ? 'green' : 'red';
        if($status == 'invalid' && $extension == 'org') { $status .= ' (.org WHOIS prevents request)'; }    

            
        echo "<div style=\"color: $color\">$domain is $status!</div>";
    }
}    
    
if(isset($_POST['submit']))
{
    $filename = 'saves/' . mt_rand(5, 9999999999);
        
    if(strlen($_POST['domains']) > 0)
    {

        $domains = explode("\n", $_POST['domains']);
        
        echo '<h1>Checking ' . count($domains) . ' domains</h1><br />';
        echo (isset($_POST['save'])) ? 'Preparing results, please wait...<br /><br />' : null;
        
        foreach($domains as $domain)
        {
            unset($buffer); // clean buffer - prevents problems
                    
            // (replaced str_replace)    
            preg_match('@^(http://www\.|http://|www\.)?([^/]+)@i', $domain, $matches);
            $domain = $matches[2];
            
            $tld = explode('.', $domain, 2);
            $extension = strtolower(trim($tld[1]));
            
            if(strlen($domain) > 0 && array_key_exists('.' . $extension, $ext))
            {
                $server = $ext['.' .$extension][0];
                
                $sock = fsockopen($server, 43) or die('Error Connecting To Server:' . $server);
                fputs($sock, "$domain\r\n");
                
                while( !feof($sock) )
                {
                      $buffer .= fgets($sock,128);
                }
            
                fclose($sock);
                if($extension == 'org') echo nl2br($buffer);
                
                if(eregi($ext['.' . $extension][1], $buffer)) { return_status($domain, 'available'); }
                
                else { return_status($domain, 'taken'); }
            }
            else
            {
                if(strlen($domain) > 0)     { return_status($domain, 'invalid'); }
            }
        
            ob_flush(); // output before checking next domain
            flush();
            sleep(0.1);
        }
        
        if(isset($_POST['save']) && count($domains) > 0)
        {
            echo 'Check completed, your results can be found below:';
        
            if(file_exists($filename . '_available.txt'))
            {
                echo '<br /><a href="' . $filename . '_available.txt">Available domains</a>';
            }
            
            if(file_exists($filename . '_taken.txt'))
            {
                echo '<br /><a href="' . $filename . '_taken.txt">Taken domains</a>';
            }
            else
            {
                echo '<br />0 taken domains found';
            }
            
            if(file_exists($filename . '_invalid.txt'))
            {
                echo '<br /><a href="' . $filename . '_invalid.txt">Invalid domains (could not be checked)</a>';
            }
        }    
    }
    else
    {
        echo 'You need to enter one or more domains!';
    }
} 
else
{
    ?>
<div style="text-align: center">
    <form action="index.php" method="post">
        <textarea name="domains" cols="100" rows="20"></textarea>
        <br /><input type="checkbox" name="save" value="save" /> Save results as text file?<br />

        <br /><input type="submit" name="submit" value="Check Availability" style="font-size: 30pt;" />
    </form>
</div>
    <?php
}
?>

Но и за тук нямам достъп до dnservers.php. А и като го гледам е доста кофти написан и дори не успях да го подкарам.

Разполагам и със списък (не знам до колко е актуален обаче) на WhoIs сървъри за различни разширения, както и за IP-та:

WhoIs Servers

asia|whois.nic.asia
biz|whois.biz
com|whois.verisign-grs.com
coop|whois.nic.coop
info|whois.afilias.net
jobs|jobswhois.verisign-grs.com
mobi|whois.dotmobiregistry.net
name|whois.nic.name
net|whois.verisign-grs.com
org|whois.pir.org
pro|whois.registrypro.pro
tel|whois.nic.tel
travel|whois.nic.travel
gov|whois.dotgov.gov
edu|whois.educause.edu
int|whois.iana.org
museum|whois.museum
ac|whois.nic.ac
ae|whois.nic.ae
ag|whois.nic.ag
am|whois.amnic.net
at|whois.nic.at
au|whois.aunic.net
be|whois.dns.be
bg|whois.register.bg
bj|whois.nic.bj
br|whois.registro.br
ca|whois.cira.ca
ch|whois.nic.ch
ci|whois.nic.ci
cl|whois.nic.cl
cn|whois.cnnic.net.cn
cx|whois.nic.cx
cz|whois.nic.cz
de|whois.denic.de
dk|whois.dk-hostmaster.dk
ee|whois.eenet.ee
fi|whois.ficora.fi
fr|whois.nic.fr
gd|whois.adamsnames.com
gg|whois.channelisles.net
gi|whois2.afilias-grs.net
gs|whois.nic.gs
gw|whois.nic.gw
gy|whois.registry.gy
hk|whois.hkirc.hk
hn|whois2.afilias-grs.net
ie|whois.domainregistry.ie
il|whois.isoc.org.il
in|whois.inregistry.net
io|whois.nic.io
ir|whois.nic.ir
is|whois.isnic.is
it|whois.nic.it
je|whois.channelisles.net
jp|whois.jprs.jp
ke|whois.kenic.or.ke
kg|domain.kg
ki|whois.nic.ki
kr|whois.nic.or.kr
kz|whois.nic.kz
la|whois.nic.la
li|whois.nic.li
lt|whois.domreg.lt
lu|whois.dns.lu
lv|whois.nic.lv
ly|whois.nic.ly
ma|whois.iam.net.ma
mg|whois.nic.mg
mn|whois.nic.mn
ms|whois.adamsnames.tc
mx|whois.nic.mx
my|whois.mynic.net.my
na|whois.na-nic.com.na
nl|whois.domain-registry.nl
no|whois.norid.no
nu|whois.nic.nu
nz|whois.srs.net.nz
pl|whois.dns.pl
pm|whois.nic.pm
pr|whois.uprr.pr
re|whois.nic.re
ro|whois.rotld.ro
ru|whois.ripn.net
sa|whois.nic.net.sa
sb|whois.nic.net.sb
sc|whois2.afilias-grs.net
se|whois.iis.se
sg|whois.nic.net.sg
sh|whois.nic.sh
si|whois.arnes.si
st|whois.nic.st
tc|whois.adamsnames.tc
tf|whois.nic.tf
tk|whois.dot.tk
tl|whois.nic.tl
tm|whois.nic.tm
tr|whois.nic.tr
tw|whois.twnic.net.tw
ua|whois.net.ua
ug|whois.co.ug
uk|whois.nic.uk
us|whois.nic.us
uz|whois.cctld.uz
vc|whois2.afilias-grs.net
ve|whois.nic.ve
vg|whois.adamsnames.tc
wf|whois.nic.wf
ws|whois.website.ws
yt|whois.nic.yt

IP Servers

arin|whois.arin.net
ripe|whois.ripe.net
apnic|whois.apnic.net
lacnic|whois.lacnic.net
afrinic|whois.afrinic.net

Ако някой има желание и възможност да помогне да го подкараме - да пише. За почерпка ще се разберем допълнително на ЛС. :wink:
Предполагам, че в по-завършен вид ще бъде полезен на много хора, които търгуват с домейни, а и просто за следене на собствени такива.

[SUP]
+Ангел Порязов - Профил в Google+​
[/SUP]
 
Последно редактирано:
От: PHP: Проверка на expiration date?

Преди доста време разрабитих подобно нещо за wms-tools.com - там се поддържат доста домейни.
Истината е че за повечето TLD-та трябва да си напишеш отделен код извличане на информацията.
Направи whois на няколко различни TLD-та и ще видиш, че всички те връщат различно структуриран текст.
Отделно много от TLD-тата не връщат нужната информация (виж .de)
 
От: PHP: Проверка на expiration date?

Долното решава проблема... до някъде (с 200-300 "if"-а ще стане със сигурност :lol: )...

PHP:
	$output = explode("\n", $output);
	$expd = array("Expiration Date", "Creation Date");
	foreach ($output AS $k => $v) {
		$v = trim($v);
		$vsep = explode(":", $v);
		if (in_array($vsep[0], $expd)) {
			echo $v . "<br />"; // информация и дата;
			echo $vsep[1] . "<br />"; // само датата;
		}
	}
}

Тая Captcha на register.bg обаче много ме мъчи. И това .DE сега го проверих... колко отвратително е направено не е истина просто... даже и няма creation и expiration dates...
уФф... ама и аз се захващам с едни работи... Май е обречена на неуспех тая идея...
 

Горе