MVH

MVH
Рейтинг
64
Регистрация
03.05.2005

В личку, плиз.

Немного подправил whois скрипт. Предыдущий выдавал, что домен занят, если whois сервер отвечал, что превышен лимит запросов.

Вот:


$WHOIS_SERVERS = array(
'ua' => array('addr' => 'whois.com.ua', 'free_response' => 'No entries found for domain', 'occupy_response' => 'domain:'),
'ru' => array('addr' => 'whois.ripn.net', 'free_response' => 'No entries found for the selected source', 'occupy_response' => 'Last updated on'),
'com' => array('addr' => 'whois.internic.net', 'free_response' => 'No match for', 'occupy_response' => 'Last update of whois database'),
'net' => array('addr' => 'whois.internic.net', 'free_response' => 'No match for', 'occupy_response' => 'Last update of whois database'),
'org' => array('addr' => 'whois.publicinterestregistry.net', 'free_response' => 'NOT FOUND', 'occupy_response' => 'Last Updated On'),
'info' => array('addr' => 'info.whois-servers.net', 'free_response' => 'NOT FOUND', 'occupy_response' => 'Domain Name:'),
'biz' => array('addr' => 'biz.whois-servers.net', 'free_response' => 'Not found', 'occupy_response' => 'Whois database was last updated on'),
'' => array('addr' => 'whois.internic.net', 'free_response' => 'No match for', 'occupy_response' => 'Last update of whois database')
);

function check_domain($domain_name, &$whois_servers)
{

$zone = explode('.', $domain_name);
$zone = $zone[count($zone) - 1];


if (!array_key_exists($zone, $whois_servers) && !array_key_exists('', $whois_servers))
return 'No whois server';
else if (array_key_exists($zone, $whois_servers))
$whois = $whois_servers[$zone];
else
$whois = $whois_servers[''];

$sock = fsockopen ($whois['addr'], 43, $errno, $errstr);
if (!$sock)
{
return false;
}
else
{
fputs ($sock, $domain_name."\n");
while (!feof($sock))
{
$response = fgets($sock, 128);
if (strstr($response, $whois['free_response']))
{
fclose($sock);
return 'free';
}
else if (strstr($response, $whois['occupy_response']))
{

fclose($sock);
return 'occupy';
}
}
}

fclose($sock);
return 'no_response';
}
Andreyka:
С таким скриптом whois забанит в момент

Предложите другой.

Можно к этому прокси прикрутить. Другого способа, думаю, нет.

В личку, пожалуйста, все сайты.

в личку, плиз.

В личку, плиз.

Нашёл глюк. Надо исправить адрес whois сервиса whois.ripe.net на whois.ripn.net. Не знаю с чем это связано, т.к. раньше работало именно через whois.ripe.net. Ну да ладно.

Вот новая версия скрипта.


$WHOIS_SERVERS = array(
'ua' => array('addr' => 'whois.com.ua', 'text' => 'No entries found for domain'),
'ru' => array('addr' => 'whois.ripn.net', 'text' => 'No entries found for the selected source'),
'' => array('addr' => 'whois.internic.net', 'text' => 'No match for')
);
//
function check_domain($domain_name, &$whois_servers)
{

$zone = explode('.', $domain_name);
$zone = $zone[count($zone) - 1];


if (!array_key_exists($zone, $whois_servers) && !array_key_exists('', $whois_servers))
return 'No whois server';
else if (array_key_exists($zone, $whois_servers))
$whois = $whois_servers[$zone];
else
$whois = $whois_servers[''];

$sock = fsockopen ($whois['addr'], 43, $errno, $errstr);
if (!$sock)
{
return false;
}
else
{
fputs ($sock, $domain_name."\n");
while (!feof($sock))
{
if (strstr(fgets($sock, 128), $whois['text']))
{
fclose($sock);
return 'free';
}
}
}
fclose($sock);
return 'occupy';
}

В переменной $WHOIS_SERVERS содержится массив с адресами whois серверов (для разных зон они часто бывают разными). Формат такой:

'zone' => array('addr' => 'whois.ripn.net', 'text' => 'No entries found for domain'),

Вместо zone здесь указывается зона (например, "ru"). Вместо whois.ripn.net (ключ массива 'addr') - адрес, соответствующий данной зоне, а в ключе 'text' указывается фраза, которая выдаётся whois сервером, если домен свободен (помимо подобной фразы whois сервер выдаёт ещё и много другой информации и эта фраза ищется среди выданной инфы).

Элемент массива с пустым ключом ('') используется по умолчанию, если для какой-то зоны не указан whois сервер.

Вызывать ф-ю надо так:


check_domain('yandex.ru', $WHOIS_SERVERS);

Если домен свободен, то ф-я вернёт 'free', если занят - 'occupy', если для зоны указанного домена не указан whois сервер и whois сервер по умолчанию (пустой ключ массива) не задан - то 'No whois server', в случае ошибка ф-я вернёт false.

Скрипт для проверки домена не работоспособен.

Походу ripe прикрыл лавочку. Завтра попробую разобраться.

2.1.6, имхо.

Всего: 571