InetAddress.getLocalHost()。getHostAddress();涉及DNS服务器?

时间:2011-09-12 13:41:11

标签: java dns ip host

使用以下代码

InetAddress.getLocalHost().getHostAddress();

可以获取主机地址。但是JVM如何找到它呢?

Java API仅告诉您它返回它(API Reference),但是是否涉及DNS服务器,如果是,则何时调用它?

如果只调用一次服务器名称如何在本地保存?

3 个答案:

答案 0 :(得分:6)

实际的实现是使用JNI在本机代码中完成的,因此它在平台之间会有所不同。

也就是说,没有理由需要DNS来查找网卡所在机器上的IP地址。人们可以从网卡上读取ip信息。

坏消息:没有办法确定这是否会在Java运行的任何平台上进行DNS查找,因为它是本机代码,并且机器可以进行DNS查找,即使它是实际上并不存在。

好消息:在我的linux机器上,它没有进行DNS查找(通过wireshark确认),这正是我所期望的。如果您认为它正在进行查找,那么可能有多种原因可以进行查找(取决于您的本机绑定客户端的可配置性),如果您安装wireshark(或使用合适的网络分析器),您可以快速找到如果你自己抬头。

编辑:请注意,如果要对其进行查找,则名称查找将位于已链接的调用的.getLocalHost()部分中。

答案 1 :(得分:0)

InetAddress(特别是InetAddress.getLocalHost()的结果)表示IP地址,getHostAddress()返回其文本表示,因此不需要DNS查找。

如果您需要主机名,可以拨打getHostName() - 它可以执行反向DNS查询:

  

如果使用主机名创建此InetAddress,则将记住并返回此主机名;否则,将执行反向名称查找,并将根据系统配置的名称查找服务返回结果。如果需要查找名称服务,请调用getCanonicalHostName。

答案 2 :(得分:0)

InetAddress.getLocalHost()并没有像大多数人认为的那样做。它实际上返回了机器的主机名,以及与该主机名关联的IP地址。这可能是用于连接外部世界的地址。它可能不会。这取决于您如何配置系统。

在我的Windowsbox上,它获取了机器名称和外部IP地址。在我的linux机器上它返回主机名和127.0.0.1因为我在/ etc / hosts

中设置了它

此处不涉及使用DNS服务器。