【问题标题】:dnsjava can't resolve "localhost" on Linux machinednsjava 无法解析 Linux 机器上的“localhost”
【发布时间】:2013-05-27 23:02:14
【问题描述】:

在我注册dnsjava as default Java DNS provider 后,我遇到了问题。它无法解析我的 Linux 机器上 /etc/hosts 文件中描述的本地地址。这个文件看起来像这样:

127.0.0.1   localhost
127.0.1.1   servername

因此,如果我尝试解决其中一个这样的名称,就会发生 UnknownHostException:

org.xbill.DNS.Address.getByName("localhost");
org.xbill.DNS.Address.getByName("servername");

当您将 dnsjava 与默认 dns 提供程序一起使用时,这不是问题。作为唯一的提供者,dnsjava 会在默认库中导致许多错误,结果证明这些错误高度依赖于 localhost 解析能力。那么问题来了:如何改变 dnsjava 的行为来解析本地主机名?

编辑。下一个代码可以正常工作:

java.net.InetAddress.getByName("localhost");

但是 java.net.InetAddress.getLocalHost() 方法抛出:

java.net.UnknownHostException: servername

【问题讨论】:

    标签: java linux hosts dnsjava


    【解决方案1】:

    dnsjava 是一个 DNS 客户端库;它与 DNS 服务器对话。 /etc/hosts 不是 DNS 协议的一部分,dnsjava 对此一无所知。

    请参阅 dnsjava 用户邮件列表上的这篇旧帖子,作者是:http://old.nabble.com/DNS-Resolve-from-hosts-file-first-then-DNS-Server-td15431381.html

    在这方面没有任何改变。

    如果java.net.InetAddress.getByName() 工作正常,则您的 DNS 服务器配置为响应对localhost 的查询。

    【讨论】:

    • 感谢您的链接!这一切听起来都很正常。但在我的情况下,方法java.net.InetAddress.getLocalHost() 尝试将servername 作为本地主机名返回。由于 DNS 服务器不知道这样的主机名,我得到了 UHE。问题是太多的库想知道本地主机名。我无法更改库和 DNS 服务器的行为,所以我应该在 dnsjava 中更改它。
    • 注意:此答案中的 URL 不再有效(感谢 Nabble),但它可以在 web.archive.org/web/20111220074414/http://old.nabble.com/… 的 Wayback 机器上使用
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 2011-10-23
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2011-08-24
    • 2016-03-24
    相关资源
    最近更新 更多