Как проверить занят домен в определённой зоне или не занят? Как это делают провайдеры и регистраторы доменов?

Ничего на самом деле сложного в этом нет. Для этого не нужно абсолютно никаких платных сервисов.
Любой зоне соответствует свой WHOIS сервер. Через который можно узнать подробную информацию о человеке/организации, на которую зарегистрирован тот или иной домен. Нопример зоне ua соответствует сервер whois.com.ua. Он также отвечает за домены второго уровня таких как net.ua, com.ua и т.д. Также получить данные по украинским доменам можно через глобальный сервер whois.ripe.net.
Пример реализации на PHP с использованием сокетов:
$connection = @fsockopen("whois.com.ua", 43);
fputs($connection, "drozdov.com.ua");
$buffer = "";
while (!feof($connection)) {
$buffer. = fgets($connection, 4096);
}
fclose($connection);
if (strpos($buffer, "No entries found for domain")){
// домен свободен
} else {
// домен занят
}
Хочу заметить, что все сервера выдают разные сообщения об ошибке, по которым делается вывод о том, что домен не зарегистрирован. На whois.com.ua он такой, как в примере (No entries found for domain), но на других серверах он может быть совсем другим. Например:
- на сервере whois.ripn.net, который отвечает за зону RU - отрицательный ответ выглядит “No entries found for the selected source(s).”
- сервер whois.afilias.info, отвечающий за зону INFO, выдаёт просто “NOT FOUND”
- и т.д
Задержек в ответе сервера практически нет, поэтому проверки по большому количеству зон не слишком затягиваются.
Где взять перечень серверов на зоны kiev.ua lutsk.ua .odessa.ua.
Перечень никто вам не даст
можно проверить только лишь наличие зарегистрированного доменного имени.
Так-то оно так, только на сервере whois.ripn.net существует ограничение на максимум 30 проверок в минуту. Поэтому с массовыми проверками возникают проблемы.