Java 将IP地址转换为主机名

Java 将IP地址转换为主机名,java,network-programming,Java,Network Programming,在我的java应用程序中,如果用户输入IP,我们需要显示主机名,如果给出了主机名,那么我们需要显示主机的IP 例如,如果用户输入IP地址,如173.194.36.37应用程序应显示google.com,反之亦然 是否有任何实用程序可用于执行此操作?您要查找的是一个名为。似乎正是您所需要的。如果您使用Java编码,请尝试使用 就域名而言,没有内置的实用程序,没有。您可以通过使用getCanonicalHostName()on-获得主机名(但不是域名),这应该可以工作。最好的答案在这里链接到该项目,

在我的java应用程序中,如果用户输入IP,我们需要显示主机名,如果给出了主机名,那么我们需要显示主机的IP

例如,如果用户输入IP地址,如
173.194.36.37
应用程序应显示
google.com
,反之亦然


是否有任何实用程序可用于执行此操作?

您要查找的是一个名为。似乎正是您所需要的。

如果您使用Java编码,请尝试使用


就域名而言,没有内置的实用程序,没有。您可以通过使用
getCanonicalHostName()
on-获得主机名(但不是域名),这应该可以工作。最好的答案在这里链接到该项目,这将得到你的域名

下面给出了连接到Google服务器并从中获取主机名的示例代码:

public class GetHostName {
public static void main(String[] args) throws Exception {
    InetAddress address = InetAddress.getByAddress(new byte[]{74, 125,(byte) 227, 7});
    System.out.println(address.getCanonicalHostName());
}
}

SomeKittens向您介绍的项目看起来像是用Java编写的完整DNS服务器,这可能超出了您的需要。看看:


你知道一个IP号码可能有几个主机名吗?例如,127.0.0.1同时具有localhost和localhost。localdomain@vidstige不使用反向DNS。这里IP映射到一个主机名,即所谓的“规范主机名”。您无法获得唯一的结果,请参阅173.194.36.37,请参阅bom04s02-in-f5.1e100.net而不是google.com
173.194.36.37
不能解析为
google.com
,而是解析为
bom04s02-in-f5.1e100.net
。不过,IP块归谷歌所有。@SjB您得到的是
bom04s02-in-f5.1e100.net
,对。只有这样。当然,多个名称可以指向一个IP地址。但是IP地址只能反向解析为一个主机名。如果有
InetAddress.getHostName()
@PhilippReichart,则无需引入第三方库。问题是“是否有可用的实用程序”,因此我认为为什么不开放源代码第三方库。@PrakashK Simplicity。为什么要引入100多个类,而您所希望的一切都可以通过调用现有的方法来实现呢?更少的移动部件,更不会出错。@PhilippReichart InetAddress类只会为您获取服务器的主机名,而不会为您获取域,这正是OP所要求的(尽管他没有很好地表达)。@Jon您是否意识到裸域只离任何主机名一个
子字符串()
?这几乎不需要库。显然,不要忘记UnknownHostException的异常处理。对于Google.com,这段代码给出了“74.125.237.100”作为结果。这是正确的,对吗?如果我去的话,我会在google.com.No上结束。OP要求提供给您给定IP地址的域名。上面的代码给出了完全相反的结果——一个IP地址给出了一个域名。他要求的是“反之亦然”。。。但是,如果您希望我的代码片段为您提供一个IP的名称,那么您首先为什么要通过google.com?
public class GetHostName {
public static void main(String[] args) throws Exception {
    InetAddress address = InetAddress.getByAddress(new byte[]{74, 125,(byte) 227, 7});
    System.out.println(address.getCanonicalHostName());
}
}
java.net.InetAddress.getByName("example.com").getHostAddress();