2012-05-11 192 views
9

在我的Java应用程序中,如果用户输入IP,我们需要显示主机名,如果给出主机名,那么我们需要显示主机的IP。将IP地址转换为主机名

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

是否有任何工具可用于执行此操作?

+0

你知道一个IP号码可能有几个主机名吗?例如127.0.0.1 * * localhost和localhost.localdomain – vidstige

+0

@vidstige不与反向DNS。这里IP被映射到一个主机名,即所谓的“规范主机名”。 – glglgl

+1

您无法获得唯一的结果,请参阅http://aruljohn.com/ip2hostname.html,网址为173.194.36.37请参阅bom04s02-in-f5.1e100.net而非google.com! – SjB

回答

17

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

InetAddress addr = InetAddress.getByName("173.194.36.37"); 
String host = addr.getHostName(); 
System.out.println(host); 
+4

显然,不要忘记UnknownHostException的异常处理。 – ccKep

2

你在找什么叫做DNSThis project似乎是你在找什么。

+0

如果存在'InetAddress.getHostName()',则不需要引入第三方库。 –

+2

@PhilippReichart问题说“有没有可用的实用程序”,所以我想为什么不开源第三方库。 –

+0

@PrakashK简单。为什么要通过调用现有方法来实现所有你想要的* 100 *以上的类?更少的运动部件,更不用说出错了。 –

0

在域名方面,有没有内置的实用工具,没有。你可以通过在InetAddress上使用getCanonicalHostName()获得主机的名称(但不是域名) - 这应该有效。这里的最佳答案与DNS Java项目有关,它将为您提供域名。

示例代码来连接,并获取主机的名称来自谷歌的服务器之一如下:

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()); 
} 
} 
2

称你的项目SomeKittens看起来像用Java编写的一个完整的DNS服务器,这可能比你需要的更多。看看java.net.InetAddress

java.net.InetAddress.getByName("example.com").getHostAddress(); 
+0

对于Google.com,此代码给了我“74.125.237.100”作为结果。 – Jon

+0

这是正确的,对吧?如果我去http://74.125.237.100/,我最终会在google.com上。 – Brian

+0

不是.OP要求的东西会给你一个IP地址的域名。上面的代码给出了完整的反向 - 给定域名的IP地址。 – Jon