Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JNDI获取DNS SRV记录_Java_Dns_Jndi_Srv - Fatal编程技术网

Java 使用JNDI获取DNS SRV记录

Java 使用JNDI获取DNS SRV记录,java,dns,jndi,srv,Java,Dns,Jndi,Srv,我正在尝试使用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"); DirConte

我正在尝试使用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;
Hashtable env=new Hashtable();
put(“java.naming.factory.initial”、“com.sun.jndi.dns.DnsContextFactory”);
put(“java.naming.provider.url”dns://dns.server.com");
DirContext ctx=新的初始DirContext(env);
Attributes=ctx.getAttributes(“_sip._udp”,新字符串[]{“SRV”});
返回属性;
但是当尝试获取属性时,我得到以下异常

DNS错误[根异常为 java.net.portUnreachableeException: ICMP端口不可访问];剩余名称 "啜饮"

我已经验证了主机-t srv\u sip.\u udp.server.com返回有效的srv记录


出现这种情况的原因是什么?

以下原因之一:
dns.server.com
不是有效的dns服务器,没有
\u sip.\u udp
的SRV记录,dns服务在端口53(标准dns端口)上没有响应,或者您的Java代码错误

要诊断DNS服务器故障,您可以尝试
host-t SRV\u sip.\u udp.server.com DNS.server.com
dig@DNS.server.com-t SRV\u sip.\u udp.server.com
确认服务器工作正常

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

更改:

env.put("java.naming.provider.url", "dns://dns.server.com");
ctx.getAttributes("_sip._udp", new String [] { "SRV" });
致:

(即,只需使用操作系统的标准DNS解析)

更改:

env.put("java.naming.provider.url", "dns://dns.server.com");
ctx.getAttributes("_sip._udp", 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;
Hashtable env=new Hashtable();
put(“java.naming.factory.initial”、“com.sun.jndi.dns.DnsContextFactory”);
DirContext ctx=新的初始DirContext(env);
Attributes=ctx.getAttributes(“_sip._udp.domain.com”,新字符串[]{“SRV”});
返回属性;