Java 无法从 AIX 解析 DNS 地址:UnknownHostException

Posted

技术标签:

【中文标题】Java 无法从 AIX 解析 DNS 地址:UnknownHostException【英文标题】:Java cannot resolve DNS address from AIX: UnknownHostException 【发布时间】:2010-11-01 08:22:45 【问题描述】:

我遇到了这个奇怪的错误。

在 AIX 上,如果我可以从命令行访问我的服务器(使用 ping / telnet)

但如果我尝试使用 java,我会遇到 UnkownHostException

这是由于 Java 无法以某种方式“使用” DNS,但我不知道为什么。如果我使用 IP 地址,它可以正常工作。

这是我的测试程序。

    import java.net.*;

    public class Test 
            public static void main( String [] args ) throws Exception  
                    String host = args[0];
                    int port = Integer.parseInt( args[1] );
                    System.out.println("Connecting to: " + host + " at port: " + port );
                    Socket socket = new Socket( host, port );
                    System.out.println("Connected!");
                    socket.close();
                    System.out.println("Closed!");

            
     

是否有人知道 AIX 下禁止程序(如 java )访问 DNS 信息的某种配置?

我(以及 sysadm )已在 /etc/hosts 中添加了我的地址,但它也不起作用。

提前致谢

Java 版本:

Java(TM) 2 Runtime Environment, Standard Edition (build pap32dev-20080315 (SR7))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223-20080315 (JIT enabled)

【问题讨论】:

会不会是被缓存咬了? (java.sun.com/javase/6/docs/technotes/guides/net/properties.html) JVM 是否在后续尝试后重新启动? 差不多,我是用 java Test myhost 80 从命令行运行的 将 networkaddress.cache.ttl 和 networkaddress.cache.negative.ttl 都设置为 1,然后重试。 networkaddress.cache.ttl 默认为 -1,表示“永远缓存”。 我一直被 .ttl 设置所困扰 - 为什么 Sun 将默认设置为无穷大,这超出了我的理解。不过,如果他们从命令行运行测试,那似乎不是 OP 的问题。 【参考方案1】:

我也遇到了这个问题。我在 Ubuntu64 上安装了许多 java 程序,它们都不能解析域名(也有多个 JRE——其中一些是 IBM 产品)。如果我将域名与 IP 地址一起放在 hosts 文件中,那么它仅适用于这些域。每个其他非 java 程序都可以很好地使用域解析。诡异的! 如果我找到答案,我会在这里发布。如果你有答案,请帮助我们!

【讨论】:

你最后解决了吗?我也有同样的问题【参考方案2】:

Java 似乎不遵守系统上指定的 DNS 查找顺序。例如,在/etc/nsswitch.conf我的Solaris系统上我定义了:

主机:文件 nis dns

Java 想先去dns,我不明白。似乎可以通过设置sun.net.spi.nameservice.provider.n 属性来更改排序。

我发现的一种解决方法是附加一个“。”在主机名的末尾。例如,如果在 /etc/hosts 中,我有

192.168.1.1 mailhost

在我的 java 应用程序中,我会指定 InetAddress.getAllByName("mailhost.")

【讨论】:

【参考方案3】:

设置系统属性

sun.net.spi.nameservice.provider.1=dns,sun

在 Ubuntu 上为我解决了这个问题

【讨论】:

【参考方案4】:

检查是否需要使用代理,如果需要,请在命令行中指定其详细信息

http://helpdesk.objects.com.au/java/how-to-tell-a-java-application-to-use-a-proxy-server

【讨论】:

纯问题:如果我可以使用“ping”或“telnet 主机端口”访问远程主机,是否需要使用代理?或者如果我可以使用直接 IP 地址访问远程主机?【参考方案5】:

您必须检查 /etc/services 文件。

我遇到了同样的错误,这是因为服务:

domain .......... 

被评论了。

【讨论】:

以上是关于Java 无法从 AIX 解析 DNS 地址:UnknownHostException的主要内容,如果未能解决你的问题,请参考以下文章

关于电脑出现"无法解析服务器的名称和地址"的问题

使用dhcp可以获得正确的IP和DNS地址,但是无法上网,nslookup无法找到正确的dns服务器进行解析

无法解析服务器的名称或地址怎么办

解决github无法加载图片

解决github无法加载图片

全球免费公共 DNS 解析服务器 IP 地址列表推荐 (解决无法上网/加速/防劫持)