使用JAVA从网络上的IP地址获取主机名

时间:2015-01-03 09:50:50

标签: java networking network-programming hostname inetaddress

我正在尝试查找网络中所有已连接客户端的信息。我能够找到客户端(可以访问)但无法获取有关他的信息。我只需要主机名(计算机名),但下面的代码只打印IP地址。我错过了什么?

private void getListOfHost(){
     String subnet="192.168.0";
     int timeout=100;
     for (int i=2;i<15;i++){
         String host=subnet + "." + i;
         try {
            if (InetAddress.getByName(host).isReachable(timeout)) {
                 InetAddress address = InetAddress.getByName(host);
                 System.out.println(host + " is reachable");
                 System.out.println("Canonical host: " + address.getCanonicalHostName());
                 System.out.print("Host name: " + address.getHostName() + "\n");
            }
         }
         catch(Exception e){e.printStackTrace();}
    }
}

输出

192.168.0.6 is reachable
Canonical host: 192.168.0.6
Host name: 192.168.0.6

1 个答案:

答案 0 :(得分:1)

您在代码中没有遗漏任何内容,但错误来源是被叫系统的 安全管理员/防火墙

InetAddress.getCanonicalHostname()的Oracle文档指出: -

<强>返回:

  

此IP地址的完全限定域名,或者如果是   安全检查,文本不允许操作   表示IP地址。

InetAddress.getHostname()的Oracle文档指出: -

<强>返回:

  

此IP地址的主机名,或者如果不允许该操作   通过安全检查,IP地址的文本表示。

解决方案: -

无论您想查询主机名的系统,只需禁用该系统的防火墙即可。安全管理器将始终阻止关于网络中其他系统的系统特定查询,因为它被认为不是要共享的信息(不安全)。 你应该始终牢记这一点。