Aug 24, 2015 16:29
Вообще-то есть специальный метод InetAdress.isReachable(), но он не гарантированное работает, т.к. в ОС очень часто для JVM закрывается доступность к ICMP-протоколу, дабы чего не вышло. Варианта решения 3:
1) запустить JVM с правами рута (явно так нельзя по правилам безопасности, но тем не менее, хоть и адовое, но решение)
2) разрешить в данной OS использование ICMP для JVM
3) использовать такой статичный метод
static boolean ping(String hostName){
try {
Process prc = java.lang.Runtime.getRuntime().exec("ping -n 1 "+hostName);
if (prc.waitFor() != 0) return false;
BufferedReader br = new BufferedReader(new InputStreamReader(prc.getInputStream()));
return (br.lines().filter((String line) -> line.indexOf("TTL=") > 0).count() > 0);
}catch (InterruptedException e){
}catch (IOException e){
}
return false;
}
узелки,
ping,
java