解析主机名的IP地址

96

我有DNS服务器IP地址和主机名。

使用Java,如何使用IP地址和主机名从DNS服务器返回该主机名的IP地址?


4
命令行中的 dig <hostname> 是什么意思? - ceejayoz
如何在Java代码中执行相同操作,以及在哪里使用DNS服务器IP地址和主机名。 - Dark Matter
还有一个问题,我们是否需要提供DNS服务器的IP地址,或者它会默认查找?我有点困惑,我们是只需要使用主机名还是主机名+DNS服务器IP地址? - Dark Matter
2
使用名称查找地址并不复杂。只要使用系统的默认解析器即可。那么,你真的需要使用DNS服务器地址吗? - A.H.
我有同样的问题:我真的需要DNS服务器地址吗,还是它会默认解析地址。顺便说一下,我正在使用AIX Unix服务器。 - Dark Matter
4个回答

144

请查看InetAddressgetHostAddress()方法。

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 

假设我有一个 DNS IP 地址为 10.37.221.152,主机名为“www.student.com”,那么我该如何查找 IP 地址。 - Dark Matter
3
当您使用getHostAddress()时,InetAddress应该获取DNS解析的地址。但我不确定是否可以强制它使用特定的DNS服务器。 - thegrinner
那么它最好能够自动解析,而无需程序员明确指定DNS服务器地址,对吧? - Dark Matter
1
@DarkMatter 是的。我相信它使用计算机本身设置的任何DNS服务器。 - thegrinner

34

你可以像这样做:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());

9
您可以使用 InetAddress 来实现这个功能。尝试以下代码,
InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address.getHostAddress());
System.out.println(address.getHostName());

3

根据以上所有建议,您可以使用InetAddress.getByName("hostName"),但这可能会给您一个缓存的IP。请阅读Java文档以获取相关信息。如果您想从DNS中获取IP,可以使用以下方法:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");

除了@daksh指出的内容之外,您可以像这里建议的那样禁用DNS响应缓存,但是请注意禁用缓存的时间以及由您的操作系统以及其他DNS服务器缓存的DNS响应的缓存,如这里所建议的。希望这可以帮助到您。 - CrazyGreenHand
由于某种原因,这个调用对于任何主机名都会给我正面的结果。我以为它默认使用我的IP,但实际上不是这样,它会为任何未知的主机提供一些特定的IP。 - Imaskar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接