解析主机名的IP地址


85

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

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


3
dig <hostname>在命令行中?
ceejayoz

如何在Java代码中执行相同操作,以及在哪里使用DNS服务器IP地址和主机名。
黑暗问题

无论如何,我们都需要提供另一个DNS查询服务器的IP地址,或者默认情况下会尝试找到它。
黑暗问题

1
使用名称查找地址并不复杂。只要您只使用系统的默认解析器即可。所以:您真的需要使用DNS服务器地址吗?
2013年

我有一个相同的问题:我是否真的需要DNS服务器地址,或者默认情况下它将解析该地址。BTW我正在使用AIX Unix服务器。
黑暗问题

Answers:


126

看看InetAddressgetHostAddress()方法。

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

假设我有一个DNS IP地址10.37.221.152和一个主机名说“ www.student.com”,那么我如何找到该IP地址。
黑暗问题

3
@DarkMatter:要求时,InetAddress应获取DNS解析的地址getHostAddress()。我不确定是否可以强迫它使用特定的DNS服务器。
thegrinner 2013年

因此,它必须自行解决理想的情况,而无需程序员明确指定DNS服务器地址?
黑暗问题

1
@ DarkMatter是的。我相信它会使用计算机本身设置的任何DNS服务器。
thegrinner 2013年


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响应进行缓存的时间。希望这会
有所

由于某种原因,此呼叫仅对任何主机名都给了我积极的结果。我以为我默认使用我的IP,但是没有,它为我提供了用于任何未知主机的特定IP。
Imaskar 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.