PHP

Поиск в 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
=> 64.58.76.224
=> 64.58.76.177
=> 64.58.76.227
=> 64.58.76.179
=> 64.58.76.225
=> 64.58.76.178
=> 64.58.76.229
=> 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.
Теги:
Интернет-службы
Добавлено: 22 Июля 2018 18:30:51 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...