Jump to content

Verificar que un equipo este conectado a red interna en Java


Recommended Posts

Hola a todos el el foro, tengo un problema y recurro a este foro para que me puedan dar ideas. Pues veran estoy realizando una aplicacion en la cual estoy vigilando una equipos conectados a una Red Privada Virtual (VPN) y pues estoy creando una interfaz en la cual se vean los equipos y junto a ellos un semaforo para indicar si estan conectados o no. Una de las maneras que se me ocurrio es realizar un ping para saber que el equipo este encedido y conectado y pues la verdad la idea era buena hasta que me encontre de que no se puede realizar un ping desde Java.

 

A cambio de estoy encontre que Java cuanta con la clase InetAddress de java.net para interacciones con la red, tambien encontre el metodo isReachable() que sirve para verificar si una IP o nombre del Equipo se encuentra activo, el problema es que en la mayoria de los equipos me devuelve false y en algunos pocos true, pero cuando realizo un ping desde MS-DOS en 98% de los que me devolvieron false estan conectados y el mismo 98% de los que me devolvieron true no estan conectados. Entonces no se que es lo que estoy hacendo mal o si java no puede soportar realizar un IP Scan sencillo.

 

Tambien comento que he buscado por ahi en San Google y me dice que ocupe Sockets pero el problema es que con esto tengo hacer una aplicacion para el cliente y otra para el servidor y pues la verdad tengo 85 equipos que vigiliar y pues estar instalando un programa en cada una de ellas es algo tedioso.

 

Asi que vengo aqui para que me den ideas o maneras de como verificar que un equipo este conectado a la red, o mejor dicho realizar un IP Scan muy secillo. Por cierto el sistema operativo que ocupan en Windows, pero en diferentes ediciones (XP, Vista y Seven).

 

De antemano le agradezco el tiempo por leer mi post y le deseo muy buenos dias!!

 

Link to comment
Share on other sites

Hola amigo, te cuento que me tocó hacer algo parecido y tuve que hacer un cliente(en .net) para cada equipo monitoreado. Ahora, si sólo quieres monitorear que el equipo esté en la red, me parece que deberás hacer un programa en .net, c, etc. que haga el ping y escriba en disco la respuesta, de manera que luego puedas leer el resultado. Si logras hacer desde Java un ping o algo similar me avisas ya que sería un gran aporte.

 

Saludos

Link to comment
Share on other sites

  • 3 weeks later...

Bueno despues una busqueda muy cansada, la verdad pude implementar un ping sobre java. Aunque tecnicamente no lo realiza java el objetivo es monitoreo equipos en la red. En fin, lo solucion a la que llege es el manejo de archivos sobre java, creo un archivo batch con la instruccion para realizar el ping, ejecuto dicho archivo y el resultado se guarda en un archivo plano, y luego leo archivo para saber si el equipo esta o no conectado.

 

Pues esa fue la solucion que encontre, en mi parecer es como si fuera a la antigua usanza, pero bueno el objetivo esta hecho.

Link to comment
Share on other sites

yo hace tiempo hice un metodo para hacer ping

 

te lo dejo:

public static boolean ping(String ipAddress) {
	try{
	final String IPADDRESS_PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
	Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
	Matcher matcher = pattern.matcher(ipAddress);
		if(matcher.matches()) {
		return InetAddress.getByName(ipAddress).isReachable(5000);
		}
		else{
		return false;
		}
	}
	catch(Exception ex){
	Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex);
	return false;
	}
}

ve como andas con eso...

Link to comment
Share on other sites

yo hace tiempo hice un metodo para hacer ping

 

te lo dejo:

public static boolean ping(String ipAddress) {
	try{
	final String IPADDRESS_PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
	Pattern pattern = Pattern.compile(IPADDRESS_PATTERN);
	Matcher matcher = pattern.matcher(ipAddress);
		if(matcher.matches()) {
		return InetAddress.getByName(ipAddress).isReachable(5000);
		}
		else{
		return false;
		}
	}
	catch(Exception ex){
	Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex);
	return false;
	}
}

ve como andas con eso...

 

Efectivamente el metodo isReachable() o habia probado desde un principio, el problema fue que probando con la misma ip me devolvia false o true cuando el metodo queria. Por ejemplo de los 80 equipos que tengo que, monitorear 70 me marcaban true, este valor significa que el equipo esta conectado a una red, y los demas me marcaban false; pero se me ocurrio verificar que realmente fueran correctos los resultados asi que pues realice un ping a un equipo aleatorio del que me retornaron false. Cual fue mi sorpresa que la mayoria de esos false estan conectados y pues de probe con los equipos que marcaban como true paso igual, algunos estan sin acceso.

 

Por eso esta opcion la descarte desde el principio, y tuve que buscar otra, pero te agradezco por la ayuda!!

 

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...