Como escanear la LAN

Hola chicos, ando con un problema. Estoy intentando escanear mi red local, obtener las direcciones disponibles y los hostname. El propósito de este trabajo es verificar que maquinas están en la LAN, cuanto tiempo tienen, y que están haciendo.

Algo parecido a lo siguiente:

Había buscado ya en la red como hacerlo, hasta ahora he sacado unas cuantas lineas de código:

 public static void main(String args[]) throws UnknownHostException, IOException {
        InetAddress inAdd;
        for (int i = 100; i < 115; i++) {
            inAdd = InetAddress.getByName("192.168.0." + i);
            if (inAdd.isReachable(1500)) {
                System.out.println("IP: " + inAdd.getHostAddress());
                System.out.println("HOST: " + inAdd.getHostName());
                System.out.println();
            }
        }
    }

No es que lleve mucho tampoco jeje, sin embargo el método getHostName, cuando no puede obtener el hostname regresa la dirección IP. Al final solo muestra el nombre correcto para el localhost, para los demás host muestra la dirección IP.

Hasta allí, al menos ya obtengo la lista de maquinas en la LAN, ahora mis dudas mas importantes, como medir el tiempo que tienen en la red y que es lo que están haciendo cada uno de los hosts.

Alguien ha trabajado con algo relacionado y que me pueda echar un empujón? Me encontré con un programa Java Network Scanner http://sourceforge.net/projects/jnetscan/ y aunque muy bonito tampoco puede resolver correctamente los nombres de los hosts de la LAN. Como ese proyecto es código abierto pienso revisar la parte de escaneo de puertos para obtener información acerca de lo que esta haciendo el host, pero para lo de medir el tiempo, no tengo ni idea de como hacer eso.

Bueno, ojala y alguien se apiade de mi. Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Hyperic Sigar

A mí hace tiempo me pidieron hacer un "monitor" que tenía que revisar si había equipos conectados a una red, si estaban arriba, revisar qué servicios tenían corriendo, o si no eran PC, sólo se les enviaba un ping para verificar que corrieran.
No estaba taaaaan difícil, porque las ip eran estáticas, primero se configuraban, y después se monitoreaban. En tu caso, pues te tienen que dar todo el segmento de red, y tú escaneas todas las combinaciones posibles.
La biblioteca que usé era Hyperic Sigar te recomiendo que te leas toda la documentación que encuentres, porque por ejemplo, tú haces el ping desde Java, aunque está bien hecho, (si mal no recuerdo) Sigar hace uno nativo que se supone es más rápido.
La biblioteca que te comento te da para hacer muchas cosas, no sólo monitoreo, también puedes crear agentes que te den estadísticas de disco duro, RAM, y dispositivos que estén conectados a la PC que fué algo de lo que hice.
Héchale una revisada, si quieres ya un producto basado en la biblioteca, hay dos, uno que es de VMWare y que no recuerdo cómo se llama (VFabric o algo así) y otro de JBoss, el RHQ o Jopr.

Imagen de Jose Manuel

Re: Hyperic Sigar

Orale ñ_ñ, deja me pongo a estudiar esa librería, aunque en algunas partes la documentación me da mala espina XD. Iré posteando con forme vaya avanzando, total si me atoro en algo, grito jeje. Bueno, a estudiar.

Gracias @neko069, saludos.