如何在Java中进行反向DNS查询

4

我有一组IP地址,需要进行反向DNS解析,也就是获取网站名称。

我尝试了以下方法:

InetAddress addr = InetAddress.getByName("98.138.253.109");
String host = addr.getCanonicalHostName();
System.out.println(host);

然而,我例子中的IP是针对yahoo.com的。当我运行代码时,我得到:ir1.fp.vip.ne1.yahoo.com。

我需要一种方法,可以通过输入IP地址来获取域名。


您正在使用的IP地址仅指定给一个主机。正如您所想象的那样,雅虎可能有数千台服务器。它们被分配了一组IP地址,然后根据内部分配的需要进行重复使用。雅虎域下的不同服务器具有不同的名称,因此当您引用特定服务器的IP地址时,您会得到该特定服务器的名称。对于yahoo.com的通用ip地址,除非您想进行nslookup并查询整个IP地址范围以查找yahoo.com的分配并将其归纳为generalize.yahoo.com别名,否则可能会隐藏。 - myqyl4
2个回答

4

您提供的代码中的IP地址解析为yahoo,因为它是由yahoo持有的。

您使用的IP地址仅指定给一个主机。想象一下,Yahoo可能有数千个服务器。他们会被分配一组IP地址,然后根据内部分配自行重复使用。雅虎域名下的不同服务器有不同的名称,因此当您引用特定服务器的IP地址时,您会得到该特定服务器的名称。对于yahoo.com的通用ipaddress,可能会隐藏起来,除非您执行nslookup并查询整个IP地址范围以找到yahoo.com的分配,并从中进行概括。


这位用户想知道为什么他得到的是“ir1.fp.vip.ne1.yahoo.com”,而不只是“yahoo.com”。 - Brian
正确,所以请编辑您的答案并说明,这样它就会成为实际问题的答案。您目前的答案并没有回答问题。编辑后我会取消我的负评。 - Brian

4
使用IP地址来获取域名(按您期望的方式)可能是不可能的。 Yahoo将有几个服务器,它们都将映射到域名yahoo.com。但它们将具有单独的IP地址和主机名。addr.getCanonicalHostName()返回主机名而不是域名!

没错。当你在地址栏中输入yahoo.com时,它会别名到一个主机名可能与你用来访问它的别名不同的Yahoo! 服务器上。getCanonicalHostName 返回前者,但是你想要后者。@WiliamA 尝试一下只运行在一个服务器上的网站,可能会发现符合你期望的那个网站。 - Brian

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