InetAddress.getByName()没有后缀的主机名失败

时间:2014-02-19 04:11:10

标签: java dns inetaddress

我在路由器中添加了一个静态DNS条目,将一些IP地址绑定到builds-mac。然后我尝试使用Java查找其IP地址:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Testcase
{
    public static void main(String[] args) throws UnknownHostException
    {
        System.out.println("got: " + InetAddress.getByName("builds-mac"));
    }
}

这失败了:

java.net.UnknownHostException: builds-mac
    at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1246)
    at java.net.InetAddress.getAllByName(InetAddress.java:1162)
    at java.net.InetAddress.getAllByName(InetAddress.java:1098)
    at java.net.InetAddress.getByName(InetAddress.java:1048)

但是当我用builds.home.local替换主机名(相应地更新DNS条目)时,操作成功。

为什么InetAddress.getByName()需要主机名后缀?是否可以使其适用于没有后缀的主机名?

(我在Windows7,64位下运行JDK 1.7.0_60)

更新nslookup builds-mac始终有效,而最初ping builds-mac失败(could not find builds-mac)但是当我在VMWare中启动虚拟机时,ping开始工作了。 ping开始工作后,InetAddress.getByName()也会开始工作。

  1. ping为什么nslookup无法找到主机?
  2. 为什么启动VM会导致ping开始看到主机?请记住,pingcould not find builds-mac而不是找到主机但没有得到任何响应,因为主机已关闭。后者是预期的,但前者不是。
  3. UPDATE2 :所以,我发现了三条更有趣的线索......

    1. 每当ping工作时InetAddress.getByName()nslookup
    2. 不是这种情况
    3. 默认情况下,路由器未分配域名。在此模式下,nslookup始终有效,但ping没有。
    4. 如果我为路由器分配域名并续订[1]进行查找的计算机的租约,则ping开始工作。
    5. [1]重新启动计算机或运行ipconfig /renew会选择新域名,但ipconfig /flushdns没有。

      所以,这让我们回到原来的问题:

      为什么Windows客户端解析器(ping使用的内容)需要域名后缀?我的意思是,即使没有域名后缀也不行吗?

0 个答案:

没有答案