Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

lunes, 16 de junio de 2008

Un escáner de equipos en la red

Existen numerosas herramientas disponibles para la detección de equipos en una red, que permiten a su vez comprobar qué puertos tiene abiertos uno de ellos en concreto. Sin embargo, no siempre disponemos de la posibilidad de contar con este software, porque no se nos permite su instalación y/o ejecución, o bien porque lo hemos olvidado y no trajimos nuestra memoria USB con las pertinentes aplicaciones portátiles.


La consola de comandos de Windows, aun sin ser tan potente y flexible como los diversos shells de Linux, permite realizar tareas bastante más avanzadas de las que habitualmente llevamos con ella (dir c:, cd windows, del *.* o format c: /u y similares). Lo cierto es que Microsoft parece haberse dado cuenta que tenía un campo de batalla abierto, y gracias a esto ha aparecido PowerShell para cubrir este hueco, tan necesario y útil para los administradores de red. Pero aun sin contar con esta consola de comandos avanzada (disponible en Windows Vista y Windows Server 2008, y mediante la instalación del correspondiente paquete, en Windows XP), lo cierto es que, como avanzaba, la consola de comandos ofrece la posibilidad de realizar tareas no tan sencillas, y automatizar tareas en los archivos de proceso por lotes (.bat) de toda la vida.


Hoy veremos cómo realizar un escáner de equipos en la red, que nos indicará aquellos que están accesibles desde nuestra ubicación. La herramienta por antonomasia para esta tarea, si no disponemos de ninguna otra, es ping. Ping es una aplicación sencilla pero utilísima que realiza una llamada a un equipo remoto, y nos devuelve si es accesible desde nuestra máquina. Esto nos permitirá ver si salimos correctamente a la red, si el otro equipo está disponible, y si todo funciona correctamente en nuestra red.


Sin embargo, si deseamos saber cuántos equipos hay disponibles en la red, la cosa se complica un poco. No esa cuestión de ir haciendo ping al resto de equipos de la red, uno por uno, y aquí entra la automatización de tareas de que hablábamos.


Creemos un archivo .bat, desde la consola, mediante el comando


edit escaneoequipos.bat


e introduzcamos en su interior las líneas siguientes:

@echo off
for /L %%a in (1,1,254) do ping -n 1 -w 350 192.168.1.%%a | findstr /i Respuesta

Procedemos a guardar los cambios, y salimos del editor.


Si ahora ejecutamos el archivo (escaneoequipos), comenzará a realizar ping a todas las máquinas de la subred indicada (192.168.1.1 a 192.168.1.254), y escribirá en pantalla aquellas direcciones desde las que reciba respuesta a su llamada.


La sintaxis del comando es muy simple:


En primer lugar, desactivamos el eco (echo off) para evitar la aparición de continuos mensajes. Podríamos dejarlo habilitado, simplemente con no incluirlo en el archivo, y trabajar así en modo verbose, con lo que sería mucho más sencillo depurar la ejecución.


For realiza un bucle, usando un contador %a (que en el caso de estar dentro de un archivo .bat ha de sustituirse por %%a, a modo de secuencia de escape), en el intervalo 1, 254, usando un salto (step) de 1, es decir, recorre todos los posibles valores del intervalo indicado. La tarea a realizar viene dada tras el do. Se trata de un ping con sólo una petición de eco (-n 1), y un tiempo de espera de respuesta de 350 milisegundos. Daremos la dirección IP de la red a que pertenezca nuestra máquina (podemos saberlo por la IP que tengamos otorgada, consultándola con el comando ipconfig), y usaremos el contador %%a para indicar la parte de la dirección IP que deseamos que sea cambiante. Por último, realizamos un filtrado (mediante un pipe | y el comando findstr) de aquellas respuestas que incluyan la subcadena "Respuesta" (si tenemos Windows en inglés, cambiar por Reply). ¡Y listo, ya tenemos un pequeño escáner de equipos en la red!


escanerhosts.PNG


Resulta sencillo ampliar la funcionalidad del script. Por ejemplo, podemos escanear todos los equipos dentro de una subred más amplica, anidando dos bucles del modo siguiente:

for /l %%a in (1,1,254) do for /l %%b in (1,1,254) do ping -n 1 -w 350 192.168.%%a.%%b | ...

Y recorreríamos todos los equipos comprendidos entre el 192.168.1.1 y el 192.168.254.254.

No hay comentarios:

Publicar un comentario