Поиск в DNS

Задача
Необходимо определить доменное имя или IP-адрес.

Решение
Для этого предназначены функции gethostbyname() и gethostbyaddr():

$ip = gethostbyname('www.example.com'); // 192.0.34.72
$host = gethostbyaddr('192.0.34.72'); // www.example.com

Обсуждение
Не всегда можно доверять имени, возвращенному функцией gethostbyaddr(). Управляемый DNS-сервер для определенного IP-адреса может, в принципе, вернуть любое имя хоста. Обычно администраторы настраивают свои DNS-серверы на возвращение корректных имен хостов, но злонамеренные пользователи могут сконфигурировать свои DNS-серверы так, чтобы они возвращали неверные имена хостов.

Один из способов борьбы с подобным обманом состоит в том, чтобы вызвать функцию gethostbyname() для имени хоста, возвращенного функцией gethostbyaddr(), и убедиться, что это имя соответствует исходному IP-адресу.

Если функция не может успешно определить IP-адрес или имя хоста, то она возвращает не значение false, а переданный ей аргумент. Проверить, успешно ли был определен адрес, можно так:

if ($host == ($ip = gethostbyname($host))) {
// failure
}

Значение, возвращенное функцией gethostbyname(), присваивается переменной $ip, а также проверяется, не равно ли значение $ip значению исходной переменной $host.
Иногда одно имя хоста может соответствовать нескольким IP-адресам.


Чтобы найти все хосты, вызовите функцию gethostbynamel():

$hosts = gethostbynamel('www.yahoo.com');
print_r($hosts);
Array
(
[0] => 64.58.76.176
[1] => 64.58.76.224
[2] => 64.58.76.177
[3] => 64.58.76.227
[4] => 64.58.76.179
[5] => 64.58.76.225
[6] => 64.58.76.178
[7] => 64.58.76.229
[8] => 64.58.76.223
)

В отличие от функций gethostbyname() и gethostbyaddr(), функция gethostbynamel() возвращает массив, а не строку.

Можно также решать более сложные задачи, связанные с DNS. Например, с помощью функции getmxrr() можно получить MX-записи:

getmxrr('yahoo.com', $hosts, $weight);
for ($i = 0; $i < count($hosts); $i++) {
echo "$weight[$i] $hosts[$i]\n";
}
5 mx4.mail.yahoo.com
1 mx2.mail.yahoo.com
1 mx1.mail.yahoo.com

Для того чтобы выполнить перенос зон, динамические обновления DNS и многое другое, обратитесь к пакету PEAR Net_DNS.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Отправка почты
Отправка почты в кодировке MIME
Отправка сообщений в новостные группы Usenet
Поиск адресов с помощью LDAP
Получение и размещение файлов с помощью FTP

Вернуться в раздел: PHP / 17. Интернет-службы