Получить DNS SRV-запись, используя JNDI - PullRequest
3 голосов
/ 25 июня 2011

Я пытаюсь получить записи SRV с DNS-сервера, используя JNDI.

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

Но при попытке получить атрибуты я получаю следующее исключение

Ошибка DNS [Исключение root java.net.PortUnreachableException: Порт ICMP недоступен]; оставшееся имя '_Sip._udp'

Я подтвердил, что хост -t srv _sip._udp.server.com возвращает действительную запись SRV.

Есть причина, почему это может произойти?

1 Ответ

4 голосов
/ 25 июня 2011

Одно из следующего: dns.server.com не является допустимым DNS-сервером, не имеет записи SRV для _sip._udp, служба DNS не отвечает на порт 53 (стандартный порт DNS) или ваш код Java неверен.

Для диагностики неполадок DNS-сервера вы можете попробовать host -t SRV _sip._udp.server.com dns.server.com или dig @dns.server.com -t SRV _sip._udp.server.com, чтобы убедиться, что сервер работает.

Если host или dig вернет ожидаемую запись, попробуйте внести следующие изменения в свой код:

Изменение:

env.put("java.naming.provider.url", "dns://dns.server.com");

Кому:

env.put("java.naming.provider.url", "dns:");

(т. Е. Просто используйте стандартное разрешение DNS вашей ОС)

Изменение:

ctx.getAttributes("_sip._udp", new String [] { "SRV" });

Кому:

ctx.getAttributes("_sip._udp.domain.com", new String [] { "SRV" });

поскольку для записи SRV требуется доменное имя для поиска, в результате вы получите:

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("_sip._udp.domain.com", new String [] { "SRV" });
return attributes;
...