Si bien parece que sí, en la práctica hay muchas razones por las que esto podría fallar. Con frecuencia, los firewalls bloquean los paquetes ICMP. Además, de la forma en que Java realiza la llamada, no tendrá permisos a menos que su programa se ejecute como root. (En * nix, el comando ping usa setuid).
Si buscas en Google, encontrarás que el consenso general es que no hay una manera perfecta de hacer esto. Sin embargo, hay un par de cosas que puede probar que podrían funcionar para usted:
1) intente abrir un Socket a la dirección y al puerto específico que le interese. Si tiene éxito, se puede acceder a la dirección.
- ¿Por qué es importante la seguridad del punto final?
- ¿Qué tiene de malo una red compuesta por 10000 computadoras, en la que cada computadora está conectada directamente a cualquier otra computadora?
- ¿Cómo configuro una conexión a Internet de respaldo en una computadora portátil con Windows 7?
- ¿Cómo me doy cuenta de cómo mi escuela está bloqueando sitios web y cómo puedo superarlo?
- ¿Qué es el modelo de referencia OSI?
2) esto es un poco desagradable, pero puede intentar usar Runtime.exec para ejecutar el comando ping. Esto es específico de la plataforma (yuck), pero debería solucionar el problema setuid. Si el firewall bloquea ICMP, todavía está atascado.
Si lo que finalmente desea hacer es hacer una conexión a la dirección dada, entonces abrir un socket TCP a la dirección y el puerto específico parece un enfoque razonable. Después de todo, si no puede hacer eso, entonces no podrá comunicarse, por lo que es un buen indicador, IMHO.