2014-03-26 208 views
0

我想写一个类,它将打印出作为InetAddress.getByName()参数提供的IP地址的实际主机名。但是每次运行程序时,IP地址都会打印在控制台上而不是主机名上。关于InetAdress.getByName()的困惑

这是我的输出:= 208.73.211.249

我会怎么做才能正确打印呢?

import java.net.*; 

public class Inet1 { 

    public static void main(String[] args) throws UnknownHostException { 

     InetAddress ia=null; 
     ia=InetAddress.getByName("74.125.236.50"); 
     System.out.print(ia.getHostName()); 

    } 
} 
+0

那么,这个方法的javadoc明确指出,这将返回一个主机名的IP地址;如果你提交一个IP地址,它会返回它... – fge

+0

那么我需要做些什么来获取请求的IP地址的主机名? – arindrajit

+0

最可靠的方法是使用DNS库 - 当然,前提是您使用DNS进行名称解析。 – fge

回答

0

底层系统配置可能不允许您访问主机名。那么在Java级别上你就无能为力了。

你试过

System.out.println(ia.getCanonicalHostName()); 

+0

这将不会解析IP地址,只显示本地机器的FQDN – fge

1
InetAddress inetAddr = InetAddress.getByName("74.125.236.50"); 


String hostname = inetAddr.getHostName(); // Get the host name 
+0

如果IP地址在您的网络内,它应该打印主机名,否则它将打印IP地址本身。 – rsudha

+0

那么我需要做些什么来获取主机名。假设我试图找到这个地址为208.73.211.249的主机名称。 – arindrajit

+0

大多数时间(公共)IP <->主机名具有一对多的关系。 –