Рейтинг@Mail.ru
 

Занятость домена

Иногда бывает полезным на сайте иметь такую фишку:

Проверить занятость домена
Как это делается? На самом деле достаточно просто. Это всего навсего парсер ответов whois-серверов, которые отвечают за регистрацию доменов в своей зоне. Попробуем посмотреть, что это такое. Для этого напишем такой скриптик:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

   
// Это адрес сервера, который и выдаст ответ 
    
$whois  'whois.verisign-grs.net'
   
// Это домен, который мы хотим проверить 
    
$domain 'irbis-team.com'

   
// Открываем сокет соединения 
    
if($fp @fsockopen($whois43))  
    {  
        
// Отправляем запрос с проверяемым доменом 
        
fputs($fp$domain ."\n");  
        
$answer '';  
        
// Получаем ответ 
        
while(!feof($fp))  
            
$answer .= fgets($fp128);  
        
// Закрываем сокет     
        
fclose($fp); 
     } 
      
// Смотрим, что там интересного.          
     
echo $answer;


Смотрим текст. Если домен зарегистрирован (как в нашем случае), тоначало будет примерно таким:
Whois Server Version 2.0 Domain names in the .com and .net domains 
can now be registered with many different competing registrars.
 Go to http://www.internic.net for detailed information. 
Domain Name: IRBIS-TEAM.COM Registrar: .........


А если свободен, то таким:
Whois Server Version 2.0 Domain names in the .com and .net domains
 can now be registered with many different competing registrars. 
Go to http://www.internic.net for detailed information. 
No match for "IRBIS-SHMIRBIS.COM"........
То есть разница в том, что если не занят, то будет присутствовать фраза "No match". Нам остается вычленить её из текста, и на основании её присутствия, сделать соответствующие выводы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

   
// Это адрес сервера, который и выдаст ответ 
    
$whois  'whois.verisign-grs.net'
   
// Это домен, который мы хотим проверить 
    
$domain 'irbis-shmirbis.com'

   
// Открываем сокет соединения 
    
if($fp @fsockopen($whois43))  
    {  
        
// Отправляем запрос с проверяемым доменом 
        
fputs($fp$domain ."\n");  
        
$answer '';  
        
// Получаем ответ 
        
while(!feof($fp))  
            
$answer .= fgets($fp128);  
        
// Закрываем сокет     
        
fclose($fp); 
     } 
     
// Проверяем, есть ли нужная фраза          
     
if(!preg_match('#No match#ui'$answer))  
         echo 
"Ваши кони тихо скачут";  
     else  
         echo 
"Повезло. Быстрее регай, пока ни кто не видел!";


Вот и вся кухня. Но это только по одной зоне .com Это не годится, что за полумеры... Нужно сделать полноценную проверку. Для этого соберем в массив адреса whois-серверов и ключевые фразы:
1
2
3
4
5
6
7
8
9
10
   
    $servers 
= array(  
                       
'ru'  => array('whois.ripn.ru''No entries found'),  
                       
'com' => array('whois.verisign-grs.net','No match'),  
                       
'org' => array('whois.verisign-grs.net','No match'),  
                       
'net' => array('whois.verisign-grs.net','No match'), 
                                   
                     ); 
и так далее.

Теперь мы можем выбрать нужный, ориентируясь на домен первого уровня (ru, com, net и т.д.). Для этого выделим его из запрошенного:
1
2
3
4
   
   $first 
substr($domainstrpos($domain".") + 1);


и вообще, сочиним функцию, которая наведет в этом бардаке порядок:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
   
    $servers 
= array(  
                       
'ru'  => array('whois.ripn.ru''No entries found'),  
                       
'com' => array('whois.verisign-grs.net','No match'),  
                       
'org' => array('whois.verisign-grs.net','No match'),  
                       
'net' => array('whois.verisign-grs.net','No match'), 
                             
                             
                     );   
                       
/**   
 * Function of check of employment of the domain    
 * Функция проверки занятости домена     
 * @param  string $domain       проверяемый домен 
 * @param  array  $servers      список whois-серверов   
 * @return string               сообщение о ходе выполнения   
 *   
 * @author IT studio IRBIS-team (www.irbis-team.com)   
 * @copyright © 2010 IRBIS-team    
 */                          
                         
    
function checkDomain($domain$servers
    {                         
        
// Выделяем домен первого уровня 
        
$first substr($domainstrpos($domain".") + 1); 
        
// Вынимаем нужный массив с адресом и ответом  
        
$whois $servers[$first];  
        
// Если такой есть 
        
if(is_array($whois))  
        {  
      
            
// Открываем сокет соединения 
            
if($fp @fsockopen($whois[0], 43))  
            {  
                
// Отправляем запрос с проверяемым доменом 
                
fputs($fp$domain ."\n");  
                
$answer '';  
                
// Получаем ответ 
                
while(!feof($fp))  
                    
$answer .= fgets($fp128);  
                
// Закрываем сокет     
                
fclose($fp); 
                
// Проверяем, есть ли нужная фраза 
                
if(!preg_match('#'.$whois[1].'#ui'$answer))  
                    return 
"Ваши кони тихо скачут";  
                else  
                    return 
"Повезло. Быстрее регай, пока ни кто не видел!";  
            }    
            else  
                return 
'Сервер, гад, зажал ответ.';  
   
      }  
      else   
          return 
'Нет такого в списке whois-серверов';  

    } 
     
    
$domain = !empty($_POST['domain']) ? $_POST['domain'] : NULL;  
    
$ok     = !empty($_POST['ok']) ? true false

   if(
$ok
        echo 
checkDomain($domain$servers); 

?> 
<form action="" method="POST" >  
<input name="domain" type="text" size="40" value="<?php echo htmlspecialchars($domain?>" />  
<input name="ok" type="submit" value="Испытать судьбу" />  
</form>


Вот и все страсти-мордасти. Скрипт с целой кучей серверов здесь. можете поискать и добавить свои или убрать лишние.