我正在尝试找出网络中所有已连接客户端的信息。我能够找出客户(可以联系到),但无法获取有关他的信息。我只需要主机名(计算机名),但是下面的代码仅打印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
您不会在代码中遗漏任何东西,但是,错误的根源是被调用系统的安全管理器/防火墙。
针对InetAddress.getCanonicalHostname()的Oracle文档指出:
返回值:
此IP地址的标准域名,或者如果安全检查不允许该操作,则为IP地址的文本表示形式。
针对InetAddress.getHostname()的Oracle文档指出:
返回值:
该IP地址的主机名,或者如果安全检查不允许该操作,则为IP地址的文本表示形式。
解决方案 :-
无论您要查询其主机名的系统是什么,只要禁用该系统的防火墙即可。安全管理器将始终阻止对网络中其他系统的特定于系统的查询,因为它被认为不是要共享的信息(不安全)。您应该始终牢记这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句