我在路由器中添加了一个静态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()
也会开始工作。
ping
为什么nslookup
无法找到主机?ping
开始看到主机?请记住,ping
说could not find builds-mac
而不是找到主机但没有得到任何响应,因为主机已关闭。后者是预期的,但前者不是。UPDATE2 :所以,我发现了三条更有趣的线索......
ping
工作时InetAddress.getByName()
。 nslookup
。nslookup
始终有效,但ping
没有。ping
开始工作。 [1]重新启动计算机或运行ipconfig /renew
会选择新域名,但ipconfig /flushdns
没有。
所以,这让我们回到原来的问题:
为什么Windows客户端解析器(ping
使用的内容)需要域名后缀?我的意思是,即使没有域名后缀也不行吗?