dns_get_record
(PHP 5, PHP 7)
dns_get_record — Получение ресурсных записей DNS хоста
Описание
$hostname
, int $type = DNS_ANY
, array &$authoritative_name_servers = null
, array &$additional_records = null
, bool $raw = false
) : array|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_CAA,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_ALLвернет все записи надежнее.Замечание:
DNS_CAAне поддерживается в Windows. -
authoritative_name_servers -
Передается по ссылке и, если передан, будет заполняться ресурсными записями для удостоверяющих серверов имен (Authoritative Name Servers).
-
additional_records -
Передается по ссылке и, если передан, будет заполняться дополнительными записями (Additional Records).
-
raw -
typeбудет интерпретирован, как необработанный идентификатор типа DNS (нельзя использовать константыDNS_*). Возвращаемое значение будет содержать ключdata, который необходимо проанализировать вручную.
Возвращаемые значения
Эта функция возвращает массив ассоциативных массивов
или 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.
|
CAA |
flags: Однобайтовое битовое поле; в текущий момент
определен только бит номер 0, называющийся 'critical'; другие биты зарезервированы
и должны игнорироваться.
tag: Имя тега CAA (буквенно-числовая строка ASCII).
value: Значение тега CAA (бинарная строка, можно использовать
подформаты).
Более подробно читайте тут: » RFC 6844
|
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.
|
Список изменений
| Версия | Описание |
|---|---|
| 7.0.16, 7.1.2 | Добавлена поддержка записей типа CAA. |
Примеры
Пример #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-адрес почтового сервера,
после того как запись MX была разрешена, dns_get_record() возвращает массив
additional_records с соответствующими записями. Массив
authoritative_name_servers будет содержать список удостоверяющих
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
)
)