来自 Java 的 UnknownHostException 但主机使用 Ping/nslookup/curl 解析

Posted

技术标签:

【中文标题】来自 Java 的 UnknownHostException 但主机使用 Ping/nslookup/curl 解析【英文标题】:UnknownHostException from Java but host resolves with Ping/nslookup/curl 【发布时间】:2014-06-12 16:05:05 【问题描述】:

当 Java EE 服务器尝试从其中一项服务解析主机名时,我们会遇到以下异常。我们能够使用 ping/nslookup 命令手动解析盒子上的主机名。我们还能够使用 curl 使用与服务器尝试使用的参数相同的参数来触发该外部服务。所以看起来这个问题只有在我们尝试从 Java/Java EE 应用程序向外部主机发出请求时才会发生。

为了解决这个问题,我们手动在 /etc/hosts 文件中添加了一个条目,它解决了这个问题,但我们想要一个永久的解决方案,这样我们就不必不断更改 IP。它之前没有添加该条目可以工作,但突然停止工作。

我们的环境细节:

操作系统:Cent OS 6.3

Java:JDK 1.6.0_24

Java EE 服务器:JBoss AS 7.1.1

Http 客户端库:httpclient-4.0.jar

提前感谢您的帮助!

检查 Salesforce 许可证时出错|: java.net.UnknownHostException:na15.salesforce.com 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:175) [rt.jar:1.6.0_24] 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384) [rt.jar:1.6.0_24] 在 java.net.Socket.connect(Socket.java:546) [rt.jar:1.6.0_24] 在 sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:584) [jsse.jar:1.6.0_24] 在 org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:333) [httpclient-4.0.jar:4.0] 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123) [httpclient-4.0.jar:4.0] 在 org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) [httpclient-4.0.jar:4.0] 在 org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101) [httpclient-4.0.jar:4.0] 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381) [httpclient-4.0.jar:4.0] 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) [httpclient-4.0.jar:4.0] 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) [httpclient-4.0.jar:4.0]

【问题讨论】:

【参考方案1】:

这很可能是网络管理、变更/配置管理或一般系统管理问题,而不是编程问题。

它之前没有添加该条目可以工作,但突然停止工作。

一种方法是尝试找出导致其停止工作的变化。这不是那种会自发发生的事情。某人或某事更改了某些软件或配置以实现这一点。从它停止的时间(或您注意到的时间)开始,然后重新查看您的更改日志。

听起来这是Java DNS解析过程的问题。解析器似乎没有尝试与正常的 DNS 服务器通信,或者它正在尝试但失败了。

我们无法为您调试它,但我发现这些资源有助于解释在 Java 中进行名称查找时应该发生的情况,并提供一些有关故障排除的想法。

资源:

DNS and Java Java doesn't pick up system's DNS settings change until restarted Java and /etc/resolv.conf DNS server failover Java networking properties

【讨论】:

感谢您的回答!!我们认为 Java 如何尝试解析 DNS 名称与操作系统如何解析应该是一个问题。你的指点肯定会有所帮助。 我们发现了问题。问题在于 DNS 服务器配置的更改。谢谢你的帮助!!

以上是关于来自 Java 的 UnknownHostException 但主机使用 Ping/nslookup/curl 解析的主要内容,如果未能解决你的问题,请参考以下文章

java #Drawable来自FileName.java

java Java中的缓存反射访问(来自Spring Framework代码库)

来自java的流插入:templateSuffix

来自 Java 代码的 Tivoli 警报

来自不同类的 Java 组件

来自客户端的 Java (Tomcat) websocket 参数