JNDI DNS поиск с частичным доменным именем - PullRequest
0 голосов
/ 30 июня 2011

Например, если в моей конфигурации DNS определена следующая запись SRV

_dev._tcp          IN      SRV     0       0       8400   dev.server.com.

Я могу выполнить следующую команду

host -lt SRV server.com

И это дает мне полный список записей SRV на DNS-сервере (server.com). Если я хочу сделать то же самое, используя JNDI lookup

Hashtable<String, String> env = new Hashtable<String, String>();
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
DirContext ctx = new InitialDirContext(env);
Attributes attributes = ctx.getAttributes("server.com", new String [] { "SRV" });
return attributes;

Приведенный выше код не возвращает никаких атрибутов. Если я изменю предпоследнюю строку в приведенном выше коде на это,

Attributes attributes = ctx.getAttributes("_dev._tcp.server.com", new String [] { "SRV" });

это работает.

Но проблема в том, что я не знаю полное доменное имя ранее, и мне нужно найти запись SRV, чтобы найти полное доменное имя.

Есть идеи, как это сделать?

1 Ответ

2 голосов
/ 01 ноября 2011

Параметр -l для /usr/bin/host указывает передачу зоны DNS. В отличие от обычного DNS-запроса, зонные передачи работают по TCP.

Вот что делает host -lt SRV server.com:

  1. Находит серверы имен server.com.
  2. Подключается к первому указанному порту 53 сервера имен по протоколу TCP.
  3. Инициирует перенос зоны.
  4. Отфильтровывает результаты в соответствии с фильтром -t srv.

Вам нужно инициировать передачу зоны через JNDI и отфильтровать результаты для того, что вы ищете. Для вызова передачи зоны DNS в DnsContext используется list().

NamingEnumeration<NameClassPair> names = ctx.list("server.com");

ИМХО, у JNDI ужасный интерфейс. Он спроектирован так, чтобы быть очень общим для всех служб имен и каталогов, и механическое и техническое несоответствие между интерфейсом и DNS просто расстраивает.

Если вы ищете более прагматичную, простую в использовании и полнофункциональную библиотеку DNS, посмотрите на проект dnsjava по адресу http://www.dnsjava.org

Также следует помнить, что не каждый DNS-сервер разрешает передачу зон с ненадежных хостов. В настоящее время даже локальные DNS-серверы не разрешают передачу зон по умолчанию.

...