dns_get_record - Получение DNS свойств и характеристик хоста
Вернуться к: Сетевые Функции
dns_get_record
(PHP 5, PHP 7)
dns_get_record — Получение DNS свойств и характеристик хоста
Описание
$hostname
[, int $type = DNS_ANY
[, array &$authns
[, array &$addtl
[, bool &$raw = false
]]]] )
Производит выборку DNS записей соответствующих свойствам хоста
hostname.
Список параметров
-
hostname -
Параметр
hostnameдолжен принимать допустимое в DNS имя хоста, как, например, "www.example.com". Метод поддерживает обратное разрешение имен хостов по их адресам в соответствии с нотацией in-addr.arpa, однако, для этих целей лучше пользоваться функцией gethostbyaddr().Замечание:
В соответствии со стандартами DNS, адреса электронной почты задаются в формате user.host (например, hostmaster.example.com в отличие от hostmaster@example.com), поэтому будьте внимательны и дополнительно проверяйте эти значения, прежде чем использовать их в таких функциях, как mail().
-
type -
По умолчанию dns_get_record() будет искать все возможные записи соответствующие заданному имени хоста
hostname. Чтобы сузить круг поиска, можно задать необязательный параметрtype. Этот параметр может принимать следующие значения:DNS_A,DNS_CNAME,DNS_HINFO,DNS_MX,DNS_NS,DNS_PTR,DNS_SOA,DNS_TXT,DNS_AAAA,DNS_SRV,DNS_NAPTR,DNS_A6,DNS_ALLилиDNS_ANY.Замечание:
Из-за неоднозначного поведения libresolv на разных платформах,
DNS_ANYможет вернуть не все записи. Если принципиально собрать все DNS записи, лучше воспользоваться более надежным, хоть и медленным, значениемDNS_ALL, -
authns -
Передается по ссылке. Если массив задан, он будет заполняться ресурсными записями для Авторитетного сервера имен.
-
addtl -
Передается по ссылке. Если задан, будет заполняться Дополнительными записями.
-
raw -
В raw режиме запрашиваются только требуемый тип вместо перебора всех типов до тех пор пока не будет получена дополнительная информация.
Возвращаемые значения
Эта функция возвращает массив ассоциативных массивов,
или FALSE в случае возникновения ошибки. Каждый ассоциативный массив содержит
по меньшей мере следующие ключи:
| Атрибут | Описание |
|---|---|
| host | Запись в пространстве имен DNS, на которую ссылается оставшаяся часть данных. |
| class | dns_get_record() возвращает только записи класса Internet, соответственно этот параметр всегда будет принимать значение IN. |
| type | Строка содержащая тип записи. Дополнительные атрибуты также будут содержаться в результирующем массиве в зависимости. По одному вложенному массиву на каждый тип. См. таблицу ниже. |
| ttl | Время жизни ("Time To Live") оставшееся для этой записи. Это не исходное ttl записи. Оно равно исходному за вычетом времени прошедшего с момента отправки запроса на сервер. |
| Тип записи | Дополнительные данные |
|---|---|
| A | ip: IPv4 адреса в десятичном формате с разделителями точками. |
| MX | pri: Приоритет почтового сервера. Чем ниже число, тем выше приоритет. target: FQDN почтового сервера. См. также dns_get_mx(). |
| CNAME | target: FQDN места расположения в пространстве имен DNS, на которое указывает запись. |
| NS | target: FQDN сервера имен, который является авторитетным для этого имени хоста. |
| PTR | target: Расположение без указания пространства имен DNS, на которое указывает запись. |
| TXT | txt: Строка данных связанных с этой записью. |
| HINFO | cpu: IANA число, обозначающее модель процессора компьютера, на который указывает эта запись. os: IANA число, обозначающее операционную систему компьютера, на который указывает эта запись. См. дополнительно IANA » Operating System Names. |
| SOA | mname: FQDN изначального компьютера, с которого получены ресурсные записи. rname: Адрес электронной почты администратора домена. serial: Порядковый номер этой ревизии запрашиваемого домена. refresh: Интервал времени (в секундах), который должны использовать вторичные сервера при обновлении удаленных копий этого домена. retry: Время ожидания (в секундах) после неудачного обновления до следующей попытки. expire: Максимальное время (в секундах), в течение которого вторичный DNS сервер должен держать в памяти данные удаленных копий доменной зоны, прежде чем ответить отказом, когда не удается обновить данные. minimum-ttl: Минимальное время (в секундах), в течение которого клиент может работать с текущим DNS разрешением, прежде чем ему придется повторно запрашивать это разрешение. Значение может быть замещено отдельными ресурсными записями. |
| AAAA | ipv6: IPv6 адреса |
| A6(PHP >= 5.1.0) |
masklen: Длина (в битах), которую нужно унаследовать
от целевого адреса chain.
ipv6: Адрес для этой конкретной записи, который нужно
объединить с chain.
chain: Запись, которую нужно дополнить данными
ipv6.
|
| SRV |
pri: (Приоритет) меньшие значения должны использоваться
первыми.
weight: Ранжирование. Записям с большим весом отдается
предпочтение.
targets должен выбираться случайно.
target и port: имя хоста и номер
порта, на котором можно найти запрошенную службу.
Дополнительную информацию можно почерпнуть по ссылке: » RFC 2782
|
| NAPTR |
order и pref: Эквивалентны
pri и weight приведенным выше.
flags, services,
regex и replacement: Параметры,
определенные в » RFC 2915.
|
Список изменений
| Версия | Описание |
|---|---|
| 5.4.0 |
Добавлен параметр raw.
|
| 5.3.0 | Функция стала доступна на Windows платформах. |
| 5.3.0 |
До этого выпуска, если был задан параметр authns,
то и addtl также становился обязательным. Теперь
нет.
|
Примеры
Пример #1 Пример использования dns_get_record()
<?php
$result = dns_get_record("php.net");
print_r($result);
?>
Результатом выполнения данного примера будет что-то подобное:
Array
(
[0] => Array
(
[host] => php.net
[type] => MX
[pri] => 5
[target] => pair2.php.net
[class] => IN
[ttl] => 6765
)
[1] => Array
(
[host] => php.net
[type] => A
[ip] => 64.246.30.37
[class] => IN
[ttl] => 8125
)
)
Пример #2 Использование dns_get_record() с DNS_ANY
Так как довольно часто требуется определить IP адрес почтового сервера,
в указанном домене, dns_get_record() возвращает массив
addtl с соответствующими записями. Массив
authns будет содержать список авторитетных DNS
серверов.
<?php
/* Отправим "ANY" запрос к php.net,
создадим массивы $authns и $addtl,
в которые будут помещен список серверов
имен и дополнительные записи, этим
серверам соответствующие
*/
$result = dns_get_record("php.net", DNS_ANY, $authns, $addtl);
echo "Результат = ";
print_r($result);
echo "Авторитетные серверы = ";
print_r($authns);
echo "Дополнительные записи = ";
print_r($addtl);
?>
Результатом выполнения данного примера будет что-то подобное:
Результат = Array
(
[0] => Array
(
[host] => php.net
[type] => MX
[pri] => 5
[target] => pair2.php.net
[class] => IN
[ttl] => 6765
)
[1] => Array
(
[host] => php.net
[type] => A
[ip] => 64.246.30.37
[class] => IN
[ttl] => 8125
)
)
Авторитетные серверы = Array
(
[0] => Array
(
[host] => php.net
[type] => NS
[target] => remote1.easydns.com
[class] => IN
[ttl] => 10722
)
[1] => Array
(
[host] => php.net
[type] => NS
[target] => remote2.easydns.com
[class] => IN
[ttl] => 10722
)
[2] => Array
(
[host] => php.net
[type] => NS
[target] => ns1.easydns.com
[class] => IN
[ttl] => 10722
)
[3] => Array
(
[host] => php.net
[type] => NS
[target] => ns2.easydns.com
[class] => IN
[ttl] => 10722
)
)
Дополнительные записи = Array
(
[0] => Array
(
[host] => pair2.php.net
[type] => A
[ip] => 216.92.131.5
[class] => IN
[ttl] => 6766
)
[1] => Array
(
[host] => remote1.easydns.com
[type] => A
[ip] => 64.39.29.212
[class] => IN
[ttl] => 100384
)
[2] => Array
(
[host] => remote2.easydns.com
[type] => A
[ip] => 212.100.224.80
[class] => IN
[ttl] => 81241
)
[3] => Array
(
[host] => ns1.easydns.com
[type] => A
[ip] => 216.220.40.243
[class] => IN
[ttl] => 81241
)
[4] => Array
(
[host] => ns2.easydns.com
[type] => A
[ip] => 216.220.40.244
[class] => IN
[ttl] => 81241
)
)
Примечания
Замечание:
Из соображений совместимости с версиями PHP ниже 5.3.0 на некоторых ОС стоит попробовать » PEAR класс » Net_DNS.
Вернуться к: Сетевые Функции