С классическим DNS вы не можете сделать это. До конца решатель вы действительно не можете различить, существует ли хост или был ли сбой сети.
Однако с DNSSEC вы действительно можете (при условии, что зона была надежно подписана). Вам понадобится валидирующая библиотека, которая может сделать это за вас, и она все равно не сможет дать вам точные результаты для неподписанных зон (которых, к сожалению, много). Но для подписанных вы получите разные результаты в зависимости от того, существовало ли имя или был ли сбой сети. DNSSEC содержит несколько записей, которые используются, чтобы доказать, что чего-то не существует.
Например, библиотека libval
из Проект DNSSEC-Tools имеет val_getaddrinfo (), который сообщит вам, был ли результат проверен или нет. Если ответа и не было, он был подтвержден, тогда вы можете верить, что его действительно не существует. Существует пример getaddr
приложения командной строки, которое можно использовать для проверки результатов, а также для изучения кода.
stackoverflow.com, к сожалению, без знака:
# getaddr wwwxxx.stackoverflow.com
Return code = -2
Validator status code = 134 (VAL_NONEXISTENT_NAME_NOCHAIN)
Error in val_getaddrinfo(): -2
И код ошибки указывает на это (часть "nochain"). Это могло произойти сбой либо потому, что он не существует, либо из-за проблем в сети.
Но для подписанных зон вы получите лучший ответ:
# getaddr wwwxxx.dnssec-tools.org
Return code = -2
Validator status code = 132 (VAL_NONEXISTENT_NAME)
Error in val_getaddrinfo(): -2
Здесь статус валидатора изменился, и мы можем быть уверены, что адрес действительно не существует.
Обратите внимание, что .com, .org и .net все подписаны, а это значит, что вы всегда можете определить, существует ли заданный файл some.com (но, возможно, не subname.something.com).
Есть и другие библиотеки, которые также поддерживают DNSSEC, но я больше всего знаком с libval, поэтому я использовал его выше.
DNS на самом деле довольно сложен, чтобы полностью понять, как и почему он работает, и даже более того, когда вы добавляете его защищенную версию. Нет простой ссылки на ответ, но вам нужно прочитать как минимум RFC 1034 и 1035 и понять RCODE # 3, который является NXDOMAIN, и понять, что он возвращается распознавателем, через который вы запрашиваете, и нет другого ответ, который разрешено вам разрешить.
Если вам нужны начальные точки для чтения, вы можете проверить:
RFC1034 Доменные имена - понятия и возможности. П.В. Mockapetris. Ноябрь 1987 г. (формат: TXT = 129180 байт) (устарели RFC0973 , RFC0882 , RFC0883 ) (обновлено RFC1101 , RFC1183 , RFC1348 , RFC1876 , RFC1982 , RFC2065 , RFC2181 , RFC2308 , RFC2535 , RFC4033 , RFC4034 , RFC4035 , RFC4343 , RFC4035 , RFC4592 , RFC5936 ) (также STD0013) (Статус: СТАНДАРТ)
RFC1035 Доменные имена - реализация и спецификация. П.В. Mockapetris. Ноябрь 1987 г. (формат: TXT = 125626 байт) (устарели RFC0973 , RFC0882 , RFC0883 ) (обновлено RFC1101 , RFC1183 , RFC1348 , RFC1876 , RFC1982 , RFC1995 , RFC1996 , RFC2065 , RFC2136 , RFC2181 , RFC2137 , RFC2308 , RFC2535 , RFC2845 , RFC3425 , RFC3658 , RFC4033 , RFC4034 , RFC4035 , RFC4343 , RFC5936 , RFC5966 ) (также STD0013) (Статус: СТАНДАРТ)
RFC4033 Введение и требования безопасности DNS. Р. Арендс, Р. Аустейн, М. Ларсон, Д. Месси, С. Роуз. Март 2005 г. (формат: TXT = 52445 байт) (устарели RFC2535 , RFC3008 , RFC3090 , RFC3445 , RFC3655 , RFC3658 , RFC3755 , RFC3757 , RFC3845 ) (Обновления RFC1034 , RFC1035 , RFC2136 , RFC2181 , RFC2308 , RFC3225 , RFC3007 , RFC3597, RFC3226 ) (Обновлено RFC6014 ) (Статус: ПРЕДЛАГАЕМЫЙ СТАНДАРТ)
RFC4034 Ресурсные записи для расширений безопасности DNS. Р. Арендс, Р. Аустейн, М. Ларсон, Д. Месси, С. Роуз. Март 2005 г. (формат: TXT = 63879 байт) (устарели RFC2535 , RFC3008 , RFC3090 , RFC3445 , RFC3655 , RFC3658 , RFC3755 , RFC3757 , RFC3845 ) (Обновления RFC1034 , RFC1035 , RFC2136 , RFC2181 , RFC2308 , RFC3225 , RFC3007 , RFC3597, RFC3226 ) (Обновлено RFC4470 , RFC6014 ) (Статус: ПРЕДЛАГАЕМЫЙ СТАНДАРТ)
RFC4035 Модификации протокола для расширений безопасности DNS. Р. Арендс, Р. Аустейн, М. Ларсон, Д. Месси, С. Роуз. Март 2005 г. (формат: TXT = 130589 байт) (устаревшие RFC2535 , RFC3008 , RFC3090 , RFC3445 , RFC3655 , RFC3658 , RFC3755 , RFC3757 , RFC3845 ) (Обновления RFC1034 , RFC1035 , RFC2136 , RFC2181 , RFC2308 , RFC3225 , RFC3007 , RFC3597, RFC3226 ) (Обновлено RFC4470 , RFC6014 ) (Статус: ПРЕДЛАГАЕМЫЙ СТАНДАРТ)
RFC5155 Безопасность DNS (DNSSEC) хэширует аутентифицированный отказ в существовании. Б. Лори, Г. Сиссон, Р. Арендс, Д. Блэка. Март 2008 г. (Формат: TXT = 112338 байт) (Статус: ПРЕДЛАГАЕМЫЙ СТАНДАРТ)