mail.eserv.ruВойти

EservApi/DnsFunctions

AndreyCherezov
(v1)
  • v1 AndreyCherezov· · Открыта
Протокол DNS описан в RFC:1035

Обновление 19.01.2003:
добавлено слово GetRRs, являющееся основным средством DNS-запросов вместо прежних более узко специализированных. "Прежние" теперь могут быть в основном переписаны через GetRRs.

Использование:
S" domain.name" dns-record-type GetRRs Например: S" forth.org.ru" TYPE-MX GetRRs


Результат GetRRs — число полученных записей.
"Нормальные" ответы — 0,1,2 и т.д. неотрицательные числа.
Особые ответы:
-1 — сетевые проблемы (невозможен обмен UDP-пакетами), это может быть следствием отсутствия модемной связи, например, т.е. просто недоступен целевой сервер. Или невозможно найти имена DNS-серверов.
-2 — связь вроде есть, но ответы не приходят с 6 попыток — скорее всего очень большие таймауты
-3 — указанный домен "не существует в природе"
-5 — DNS-сервер не хочет выполнять ваши запросы (чужой сервер, наверное)

GetRRn отличается от GetRRs тем, что не разбирает список полученных записей, а только выясняет их число, т.е. экономит время и память, если не нужен собственно список записей. Ответы все те же.

Инициализацию сети и поиск подходящего DNS-сервера библиотека производит сама при первой необходимости. Но можно указать желаемый DNS-сервер опцией "-s сервер".

Ещё полезные слова:
DnsValidateDomain ( domaina domainu — flag )
DnsValidateEmailDomain ( emaila emailu — flag )
Проверяют, является ли домен валидным почтовым доменом, т.е. можно ли на него отправлять почту. Это делается запросом MX- и A-записей для этого домена. Если есть хотя бы одна, то считается валидным. Существование имени user@ в данном домене не проверяется, "отзывчивость" найденных почтовых серверов также не проверяется — т.е. собственно попыток почтовых сессий не делается. Отрицательные ответы GetRR трактуются как "невалидный домен". Т.е. использовать эти слова можно только при рабочем DNS.

DnsDomainExists ( domaina domainu — flag )
Если GetRRn возвращает -3, то домена точно нет. Все остальные ответы, в т.ч. отрицательные трактуются как "есть", означающее на деле "есть или невозможно проверить из-за проблем DNS или сети".
Если у домена нет MX- и A-записей, то он также считается несуществующим.

NextMX ( — servera serveru true | false )

Методика перебора MX-записей по приоритетам для попыток отправки почты.
S" domain" GetMXs 0 MAX 0 ?DO NextMX ... LOOP


DnsDomainExists отличается от DnsValidateDomain отношением к ошибкам DNS. DnsDomainExists при ошибках НЕ отвергает домен, а DnsValidateDomain отвергает. При рабочем DNS они равноценны.