Java JNDI DNS错误:";“接收超时”;

Java JNDI DNS错误:";“接收超时”;,java,dns,jndi,Java,Dns,Jndi,但如果我使用“dns:/www.google.com”作为查询,而不是dns://8.8.8.8/www.google.com“,它工作完美,没有任何错误。 错误仅在我尝试指定要使用的DNS服务器时发生 "dns://8.8.8.8/www.google.com“->错误 “dns:/www.google.com”->工作 在本文档中,有与我想要使用的完全相同的用法。我不明白这为什么会产生问题 www.google.com 74.125.128.103 ERROR: No DNS record

但如果我使用“dns:/www.google.com”作为查询,而不是dns://8.8.8.8/www.google.com“,它工作完美,没有任何错误。 错误仅在我尝试指定要使用的DNS服务器时发生

"dns://8.8.8.8/www.google.com“->错误

“dns:/www.google.com”->工作

在本文档中,有与我想要使用的完全相同的用法。我不明白这为什么会产生问题

www.google.com 74.125.128.103
ERROR: No DNS record for 'www.google.com'
javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'www.google.com'
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:300)
    at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
    at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:430)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:231)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:139)
    at com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(GenericURLDirContext.java:103)
    at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
    at DNSLookup.main(DNSLookup.java:24)
Caused by: java.net.SocketTimeoutException: Receive timed out
    at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
    at java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:121)
    at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:145)
    at java.net.DatagramSocket.receive(DatagramSocket.java:786)
    at com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:411)
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:203)
    ... 7 more

您的代码没有问题,但我怀疑您是从阻止传出DNS的代理或防火墙后面运行它的

当您请求
dns:/www.google.com
时,您实际上是在请求本地DHCP提供的解析器提供
www.google.com
的IP,就像在浏览器地址行中键入地址一样

但是,当使用
dns://8.8.8.8/www.google.com
您要求使用Google DNS解析
Google.com
,这要求您的代理/防火墙允许传出TCP/UDP端口53流量,这在公司环境中通常不适用


干杯,

谢谢!我的防火墙出了问题。
www.google.com 74.125.128.103
ERROR: No DNS record for 'www.google.com'
javax.naming.CommunicationException: DNS error [Root exception is java.net.SocketTimeoutException: Receive timed out]; remaining name 'www.google.com'
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:300)
    at com.sun.jndi.dns.Resolver.query(Resolver.java:81)
    at com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:430)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:231)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:139)
    at com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(GenericURLDirContext.java:103)
    at javax.naming.directory.InitialDirContext.getAttributes(InitialDirContext.java:142)
    at DNSLookup.main(DNSLookup.java:24)
Caused by: java.net.SocketTimeoutException: Receive timed out
    at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
    at java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:121)
    at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:145)
    at java.net.DatagramSocket.receive(DatagramSocket.java:786)
    at com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:411)
    at com.sun.jndi.dns.DnsClient.query(DnsClient.java:203)
    ... 7 more
DirContext ictx = new InitialDirContext();
Attributes attrs3 = ictx.getAttributes("dns://server1.example.com/host3.example.com",
                                   new String[] {"MX"});