ProDomainer.ru - Клуб Домейнеров  
     

Войти через OpenID
Left Nav Справка ПортфолиоАукцион (39) Календарь Поиск Сообщения за день Все разделы прочитаны Right Nav

Left Container Right Container
 
Старый 26.10.2011, 23:55   #1
Член Клуба ProDomainer.ru
 

Whois Class

Класс
PHP код:
<?php 
 
/**
* Класс whois
*
* @author Matvey Vasenin
* @version 0.8 Betta
*/
class whois {
    
    protected 
$_tldName;
    protected 
$_domainName;
    protected 
$_aInfo = array();
    protected 
$_sInfo '';
    
    private 
$_conf = array(); 
 

    public function 
__construct ($domain$conf) {
        
$this->conf $conf;
        
$domain $this->_validate($domain);
        
$this->_parseDomain($domain);
        
$this->_getAnswer();
    }
    
    
    
/**
    * Получение полного ответа whois.
    *
    * @var bool $html Если true, то переводы строки будут в виде <br />, иначе \n
    */
    
public function getText ($html false) {
        return 
$html nl2br($this->_sInfo) : $this->_sInfo;
    } 
 
    
/**
    * Получение массива парамеров домена
    *
    * @var string $element Если не задан, то вернет весь массив параметров. Если сюда ввести существующий параметр, то вернет параметр
    */    
    
public function getInfo ($element false) {
        return 
$element $this->_aInfo[strtolower($element)] : $this->_aInfo;
    }
    
    
/**
    * Возвращает результат проверки на доступность домена
    */
    
public function isAvailable() {
        return (
stripos($this->_sInfo$this->conf[$this->_tldName]['server'][1]) === false) ? false true;
    } 
 
    
/**
    * Возвращает дату регистрации в формате timestamp
    */    
    
public function getRegDate() {
        return 
$this->_getTimeByDate($this->_getPart('created'));
    }
    
    
/**
    * Возвращает дату следующего продления в формате timestamp
    */       
    
public function getExpireDate() {
        return 
$this->_getTimeByDate($this->_getPart('expire'));
    } 
 
    
/**
    * Возвращает ns домена
    */   
    
public function getNS() {
        return 
$this->_getPart('ns');
    }
    
    
/**
    * Возвращает тело домена
    */   
    
public function getName() {
        return 
$this->_domainName;
    }
    
    
/**
    * Возвращает зону домена
    */   
    
public function getZone() {
        return 
$this->_tldName;
    }
    
    
/**
    * Возвращает домен
    */   
    
public function getDomain() {
        return 
$this->_domainName '.' $this->_tldName;
    }    
    
    private function 
_getTimeByDate ($date) {
        if (
$this->conf[$this->_tldName]['date']) {
            
$format = array(
                
stripos($this->conf[$this->_tldName]['date'], 'y') => 'y',
                
stripos($this->conf[$this->_tldName]['date'], 'm') => 'm',
                
stripos($this->conf[$this->_tldName]['date'], 'd') => 'd',
            );
            
ksort($format);
            
$regexp str_ireplace(array('y''m''d''.'), array('([0-9]{2,4})''([0-9]{1,2})''([0-9]{1,2})''\.'), '#' $this->conf[$this->_tldName]['date'] . '#i');
            
preg_match ($regexp$date$aDate);
            
$i 0;
            foreach (
$format as $key => $value) {
                
$i++;
                switch (
$value) {
                    case 
'y':
                        
$year $aDate[$i];
                        break;
                    case 
'm':
                        
$month $aDate[$i];
                        break;
                    case 
'd':
                        
$day $aDate[$i];
                        break;
                }
            }
            return 
strtotime("$year/$month/$day");
        } else {
            return 
strtotime($date);
        }
    }
    
    private function 
_getPart($type) {
        
$info $this->_aInfo[strtolower($this->conf[$this->_tldName][$type])];
        if (!
$info && $this->conf[$this->_tldName]['regexp'][$type]) {
            
preg_match($this->conf[$this->_tldName]['regexp'][$type], $this->_sInfo$info);
            
$info $info[1];
        }
        return 
$info;
    }
    
    private function 
_parseDomain($domain) {
        
$this->_tldName explode("."$domain);
        
$this->_domainName array_shift($this->_tldName);
        
$this->_tldName implode('.'$this->_tldName);
    }
    
    protected function 
_getAnswer() {
        
$server $this->conf[$this->_tldName]['server'][0];
        
$domain $this->_domainName '.' $this->_tldName;
        if (
$this->conf[$this->_tldName]['server'][2]) {
            
$this->_getDoubleAnswer($domain$server);
        } else {
            
$this->_getSimpleAnswer($domain$server);
        }
    }
    
    protected function 
_getSimpleAnswer($domain$server) {
        
$fp = @fsockopen($server43);
        if (!
$fp) throw new Exception ('Whois server not available.');
        
fputs($fp"$domain\r\n");
        
$this->_sInfo '';
        
$answer = array();
        while (!
feof($fp)) {
            
$answer[] = trim(fgets($fp128));
        }
        for (
$i 0;$i<count($answer);$i++) { 
            
$sInfo $answer[$i];
            
$this->_sInfo .= "$sInfo\r\n";
            
$aInfo array_map('trim'explode(':'$sInfo2));
            if (
count($aInfo) == 2  && preg_match('/^[-a-z ]+$/i'$aInfo[0])) {
                
$lowerInfo strtolower($aInfo[0]);
                if (!empty(
$aInfo[1])) {
                    if (!isset(
$this->_aInfo[$lowerInfo])) {
                        
$this->_aInfo[$lowerInfo] = $aInfo[1];
                    } else {
                        if(
is_array($this->_aInfo[$lowerInfo])) {
                            
$this->_aInfo[$lowerInfo][] = $aInfo[1];
                        } else {
                            
$this->_aInfo[$lowerInfo] = array($this->_aInfo[$lowerInfo], $aInfo[1]);
                        }
                    }
                } else { 
                    do {
                        
$i++;
                        
$string $answer[$i];
                        if(empty(
$string) || strpos($string':') !== false) break;
                        
$this->_sInfo .= "$string\r\n";
                        
$this->_aInfo[$lowerInfo][] = $string;
                    } while (!empty(
$string) && strpos($string':') === false);
                    
$i--;
                }
            }
        }
    } 
 
    protected function 
_getDoubleAnswer($domain$server) {
        
$fp = @fsockopen($server43);
        if (!
$fp) throw new Exception ('Whois server not available.');
        
fputs($fp"$domain\r\n");
        
$this->_sInfo '';
        while (!
feof($fp)) {
            
$sInfo trim(fgets($fp128));
            
$this->_sInfo .= "$sInfo\r\n"
            
$aInfo array_map('trim'explode(':'$sInfo2));
            if (
strtolower($aInfo[0]) == 'whois server') {
                
$doubleServer $aInfo[1];
            }
        }
        
$doubleServer $doubleServer $doubleServer 'whois.networksolutions.com';
        
$this->_getSimpleAnswer($domain$doubleServer);  
    } 
 
    protected function 
_validate ($domain) {
        
preg_match ('#^(?:(?:http|https|ftp|svn)?://)?([a-z0-9\.\-]+)(?:/(?:.*))?$#i'$domain$domain);
        if (!
$domain) throw new Exception('Not Valid Domain'); 
        
$domain $domain[1];  
        if (
in_array('-', array($domain{1}, substr($domain, -1))) && strpos($domain'--') !== false) throw new Exception('Not Valid Domain');
        return 
$domain;
    } 
 
}
Настройки:
PHP код:
//Настройки Хуиза
$whoisConf = array (
        
'ru' => array( 
            
'server' => array('whois.ripn.ru''No entries found'),
            
'created' => 'created',
            
'expire' => 'paid-till',
            
'ns' => 'nserver',
            
'date' => 'y.m.d' // поддеживается только y - год, m - месяй, d - день
        
),
        
'su' => array( 
            
'server' => array('whois.ripn.ru''No entries found'),
            
'created' => 'created',
            
'expire' => 'paid-till',
            
'ns' => 'nserver',
            
'date' => 'y.m.d'
        
),
        
'com' => array( 
            
'server' => array('whois.crsnic.net''No match'true),
            
'created' => 'Creation date',
            
'expire' => 'Expiration Date',
            
'ns' => 'Domain servers in listed order',
            
'regexp' => array(
                
'created' => '/Record created on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
                
'expire' => '/Record expires on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
            )
        ),
        
'net' => array( 
            
'server' => array('whois.crsnic.net''No match'true),
            
'created' => 'Creation Date',
            
'expire' => 'Expiration Date',
            
'ns' => 'Domain servers in listed order',
            
'regexp' => array(
                
'created' => '/Record created on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
                
'expire' => '/Record expires on ([0-9]{2}-[a-z]{3}-[0-9]{4})/i',
            )
        ),
        
'org' => array( 
            
'server' => array('whois.pir.org''NOT FOUND'),
            
'created' => 'Created On',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'biz' => array(
            
'server' => array('whois.biz''Not found'),
            
'created' => 'Name Server:',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'info' => array(
            
'server' => array('whois.afilias.info''Not found'),
            
'created' => 'Created On',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'mobi' => array(
            
'server' => array('whois.dotmobiregistry.net''NOT FOUND'),
            
'created' => 'Created On',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'name' => array(
            
'server' => array('whois.nic.name''No match'),
            
'created' => 'Created On',
            
'expire' => 'Expires On',
            
'ns' => 'Name Server'
        
),
        
'tv' => array(
            
'server' => array('whois.nic.tv''No match'),
            
'created' => 'Creation date',
            
'expire' => 'Expiration date',
            
'ns' => 'Name Server'
        
),
        
'cn' => array(
            
'server' => array('whois.cnnic.net.cn''No entries found'),
            
'created' => 'Registration Date',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'ki' => array(
            
'server' => array('whois.nic.ki''NOT FOUND'),
            
'created' => 'Created',
            
'expire' => 'Expires',
            
'ns' => 'Name Server'
        
),
        
'in' => array(
            
'server' => array('whois.inregistry.in''NOT FOUND'),
            
'created' => 'Created On',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'mn' => array(
            
'server' => array('whois2.afilias-grs.net''NOT FOUND'),
            
'created' => 'Created On',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'cc' => array(
            
'server' => array('whois.nic.cc''No match'),
            
'created' => 'Creation Date',
            
'expire' => 'Expiration Date',
            
'ns' => 'Name Server'
        
),
        
'ws' => array(
            
'server' => array('whois.worldsite.ws''No match for'),
            
'created' => 'Domain Created',
            
'expire' => 'Domain Currently Expires',
            
'ns' => 'Name Server'
        
),
        
'asia' => array(
            
'server' => array('whois.nic.asia''NOT FOUND'),
            
'created' => 'Domain Create Date',
            
'expire' => 'Domain Expiration Date',
            
'ns' => 'Nameservers'
        
),
); 
Использование:
PHP код:
$whois = new whois($domain['name'], $whoisConf); 


VaseninM вне форума   Ответить с цитированием
Старый 03.12.2011, 17:41   #2
Член Клуба ProDomainer.ru
 

А как надо задавать переменную $name? В плане синтаксиса.
А то у меня что-то не работает по типу
Код:
$name='name.zone';
и
Код:
$name='name';

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 03.12.2011, 18:09   #3
Член Клуба ProDomainer.ru
 

UFO,
PHP код:
$name 'prodomainer.ru';
$whois = new whois($name$whoisConf);  
var_dump($whois->getInfo()); 



Последний раз редактировалось VaseninM; 03.12.2011 в 18:09..
VaseninM вне форума   Ответить с цитированием
Старый 02.06.2012, 18:02   #4
Член Клуба ProDomainer.ru
 

Или проще не изобретая велосипед использовать http://sourceforge.net/projects/phpwhois/

Добавлено через 2 минуты
Или еще проще
PHP код:
<?php exec("/usr/bin/whois $strDomain",$arrOutPut);?>
AlexX вне форума   Ответить с цитированием
Старый 02.06.2012, 18:05   #5
Член Клуба ProDomainer.ru
 

AlexX, на сколько я помню ради практики)

Добавлено через 1 минуту
А, нет же. Мне нужно было распарсить ответ независимо от зоны, а на тот момент готовых решений не знал, вот и решил сделать оберточку.


VaseninM вне форума   Ответить с цитированием
Старый 02.06.2012, 18:51   #6
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от AlexX Посмотреть сообщение
Или проще не изобретая велосипед использовать http://sourceforge.net/projects/phpwhois/

Добавлено через 2 минуты
Или еще проще
PHP код:
<?php exec("/usr/bin/whois $strDomain",$arrOutPut);?>
Да ламер-ламер он. А еще админом назвался.


Шуранов вне форума   Ответить с цитированием
Старый 02.06.2012, 19:17   #7
Член Клуба ProDomainer.ru
 

Шуранов, ты вообще членом называешься и ниче)


VaseninM вне форума   Ответить с цитированием
Старый 02.06.2012, 22:56   #8
Член Клуба ProDomainer.ru
 

эх вы... whoisxmlapi.com

http://rudevich.com

Последний раз редактировалось VaseninM; 21.10.2013 в 11:31..
Александр вне форума   Ответить с цитированием
Старый 02.06.2012, 23:20   #9
Член Клуба ProDomainer.ru
 

лишний посредник. Зачем?

Добавлено через 28 секунд
Ну иногда конечно можно использовать, но не всегда.


VaseninM вне форума   Ответить с цитированием
Старый 02.06.2012, 23:28   #10
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от Александр Посмотреть сообщение
эх вы... whoisxmlapi.com
А вот интересно, много у них платных клиентов?



Последний раз редактировалось VaseninM; 21.10.2013 в 11:31..
Шуранов вне форума   Ответить с цитированием
Старый 02.06.2012, 23:32   #11
Пользователь
 

B whois самый ценный поиск это исторический.
miguel вне форума   Ответить с цитированием
Старый 03.06.2012, 23:36   #12
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от Шуранов Посмотреть сообщение
А вот интересно, много у них платных клиентов?
тоже интересно =)

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 04.06.2012, 05:35   #13
Пользователь
 

domaintools.com - самый популярный сайт по whois, особенно по историческим данным. Платный.
Вопрос: можете ли вы дорваться к этим данным?
miguel вне форума   Ответить с цитированием
Старый 04.06.2012, 08:19   #14
Член Клуба ProDomainer.ru
 

miguel, мы программисты, а не хакеры. Обсуждаем класс для снятия хуиз.
Дорваться до данных можно купив лицензию и спарсив данные по зарегистрированным доменам. Но это довольно незаконный способ.


VaseninM вне форума   Ответить с цитированием
Старый 04.06.2012, 09:19   #15
Пользователь
 

Ну конечно вы программисты.
Вот статья об этой компании и сколько она загребает:

http://the-2012-millionaire-project....success-story/

К слову о птичках: я писал програмку для real time detection of icbm, включая Китайские и Расейские. И не было это очень секретным делом.
miguel вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
Быстрый переход


Часовой пояс GMT +4, время: 05:50.