PHP и DNS

Автор: content Воскресенье, Апрель 8th, 2012 Нет комментариев

Рубрика: Язык PHP

В этой статье мы рассмотрим функции, которые предоставляет PHP для работы с DNS серверами. Наиболее часто возникает задача получения имени хоста по его IP-адресу, другие задачи встречаются значительно реже.

Функция gethostbyname

Синтаксис:

string gethostbyname(string hostname)

Пример использования фунции gethostbyname

<?
$hostname
= "localhost";
$ip_address = gethostbyname($hostname);
echo (
"IP-адрес $hostname: $ip_address");
?>

Функция gethostbynamel

string gethostbynamel(string hostname)

Многие компьютеры имеют несколько IP-адресов, особенно типична такая ситуация для различных серверов. Получить полный список IP-адресов, соответствующих данному имени компьютера, можно с помощью функции gethostbynamel, действующей аналогично функции gethostbyname. Другая ситуация, в которой полезно применение этой функции, возникает, когда одно имя DNS соответствует нескольким компьютерам. Это бывает при работе с DNS серверами, поддерживающими механизм кругового распределения нагрузки, при котором одно имя DNS сервера отображается на несколько компьютеров в локальной сети этого сервера.

Возвращаемый список IP-адресов функция gethostbynamel помещает в массив:

<?
$hostname
= "localhost";
$ip_addresses = gethostbyname($hostname);
echo(
"The IP adresses of '$hostName' are: <br>\n");
foreach(
$ip_adresses as $index => $val)
{
echo(
"$val");
}
?>

Функция gethostbyaddr

Эта функция принимает в качестве аргумента IP-адрес и возвращает соответствующее ему имя хоста:

<?
$ip_address
= "127.0.0.1";
$hostname = gethostbyaddr ($ip_address);
echo (
"Имя хоста с IP-адресом $ip_address: $hostname");
?>

Функция checkdnsrr

string checkdnsrr(string hostname [, string type])

DNS сервер сохраняет немало полезной информации о хосте, для чего используются так называемые записи ресурсов, которые имеют следующие типы:

  • A (Запись содержит IP-адрес хоста);
  • CNAME (Запись содержит псевдоним хоста);
  • NS (Запись содержит имя DNS-сервера, являющегося авторитетным для поддо-мена. Авторитетным является такой DNS-сервер, который замыкает цепочку DNS-запросов);
  • МХ (Запись содержит Имя хоста почтового ретранслятора в домене, которому принадлежит данный хост. В этой записи также хранится значение коэффициента предпочтения для почтового ретранслятора);
  • PTR (Запись хранит отображения IP-адресов в имена).

Функция checkdnsrr находит на DNS-сервере записи ресурсов вида type для хоста hostname

Примечание: Эта функция не поддерживается на Windows-платформах.

Функция getmxrr

string getmxrr(string hostname, array mxhost, [, array weight])

Эта функция принимает в качестве аргумента имя хоста hostname в данном домене и заполняет массив mxhost списком почтовых ретрансляторов этого домена. Если указан третий необязательный аргумент weight, то функция заполняет его значениями предпочтения, которые возвращает ей почтовый ретранслятор

Функция getmxrr является достаточно полезной. Дело в том, что когда требуется послать сообщения по адресу username@someserver.com, необходимо сначала узнать хост почтового ретранслятора для домена someserver.com, а затем получить его IP-адрес. После этого можно соединяться с хостом для доставки почты. В домене может быть несколько почтовых ретрансляторов с разными значениями предпочтения, поэтому, получив список ретрансляторов, имеет смысл устанавливать соединение с тем из них, который имеет максимальное значение предпочтения.

В следующем листинге показан пример кода, с помощью которого можно получить список почтовых ретрансляторов:

Получение списка почтовых ретрансляторов

<?
$domain
= "server.com";
getmxrr($domain, $maillist, $priority);
echo(
"Список почтовых ретрансляторов хоста $domain:
\n"
);
for(
$i = 0; $i < count($maillist); ++$i)
{
echo(
"$maillist[$i] = $priority[$i]
\n"
);
}
?>

Проверка существования адреса электронной почты

Заметим сразу, что речь идет не о проверке адресов с помощью регулярного выражения, а о проверке существования хоста почтового ретранслятора для некоторого домена. Т.е. приведенный выше код можно практически не перерабатывая приспособить для проверки существования e-mail адреса:

<?
$email_arr
= explode("@" , $email);
$host = $email_arr[1];

if (!getmxrr($host, $mxhostsarr))
{
echo
"На адрес $email отправка почты невозможна";
exit;
}

getmxrr($host, $mxhostsarr, $weight);
echo
"На $email письма могут отправляться через следующие хосты:
"
;
for (
$i=0; $i < count($mxhostsarr); $i++)
{
echo (
"$mxhostsarr[$i] = $weight[$i]
"
);
}

?>

Автор: IT-студия SoftTime (softtime.ru)

Источник: http://www.php.su/articles/?cat=examples&page=064

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты