【问题标题】:Get DNS SRV record using JNDI使用 JNDI 获取 DNS SRV 记录
【发布时间】:2011-06-24 20:18:02
【问题描述】:

我正在尝试使用 JNDI 从 DNS 服务器获取 SRV 记录。

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 错误 [根异常是 java.net.PortUnreachableException: ICMP 端口不可达];剩下的名字 '_sip._udp'

我已验证 host -t srv _sip._udp.server.com 返回有效的 SRV 记录。

为什么会发生这种情况?

【问题讨论】:

    标签: java dns jndi srv


    【解决方案1】:

    以下情况之一:dns.server.com 不是有效的 DNS 服务器,没有_sip._udp 的 SRV 记录,DNS 服务在端口 53(标准 DNS 端口)上没有响应,或者您的 Java 代码错误。

    要诊断 DNS 服务器问题,您可以尝试 host -t SRV _sip._udp.server.com dns.server.comdig @dns.server.com -t SRV _sip._udp.server.com 以确认服务器正常工作。

    如果 hostdig 返回预期的条目,请尝试对您的代码进行以下更改:

    变化:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2017-02-09
      相关资源
      最近更新 更多