gpt4 book ai didi

java - 使用 JNDI 获取 DNS SRV 记录

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:33 25 4
gpt4 key购买 nike

我正在尝试使用 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 error [Root exception is java.net.PortUnreachableException: ICMP Port Unreachable]; remaining name '_sip._udp'

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

为什么会发生这种情况?

最佳答案

以下之一: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;

关于java - 使用 JNDI 获取 DNS SRV 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com