sábado, 28 de abril de 2012

Escanear los equipos de mi red

Hay veces en las que estamos conectados a una red y queremos saber cuantos equipos estan conectados a ella y qué direcciones IP tienen estos equipos.

Existe una aplicación gratuita y muy buena llamada "Angry IP Scanner", que te permite hacer un escaneado de tu LAN en apenas unos 15 segundos. Al cabo de ese tiempo te pone que direcciones están siendo usadas, cuáles son las MAC de esos equipos, etc. Muy recomendable.

Pero si queremos hacer un programa BAT nosotros mismos que haga eso mismo, podemos usar el siguiente archivo BAT, que hace un barrido de las direcciones IP de nuestra red de area local, desde la dirección "192.168.1.1" hasta la "192.168.1.254".



-----------------------------------------
equipos.bat:


@echo off

rem Para que funcione bien el "for"
setlocal enabledelayedexpansion

for /L %%p in (1,1,254) do (
  rem Hare ping a los equipos solo una vez, para que no tarde demasiado en recorrer todos
  ping -n 1 192.168.1.%%p > nul

  rem Si la variable "errorlevel" vale 0, es que el ultimo comando (ping) se ha
  rem ejecutado con exito, es decir, algun equipo ha respondido, y entonces muestro
  rem por pantalla la direccion IP y la MAC de dicho equipo

  if !errorlevel! == 0 (

    for /f "tokens=1,2" %%n in ('arp -a 192.168.1.%%p ^| find "192.168.1.%%p"') do (
       echo %%n  ;  %%o  ;  !date!  ;  !time!
    )

  )
)


---------------------------------------

Hay que tener en cuenta que ejecutar este programa tardará algunos minutos, puesto que tiene que recorrer 254 direcciones IP.

PROGRAMA VIGILANTE DE NUESTRA RED

Podemos usar el archivo BAT anterior para que se ejecute continuamente sobre un equipo que esté siempre encendido. De esta forma tendremos constancia en cada momento de qué equipos ( o direcciones IP ) están conectados a la red en cada momento.

Crearé un archivo BAT que llame al anterior continuamente y que guarde los resultados en un archivo de texto. El nuevo archivo BAT sería como sigue:

-------------------------------------
vigilante.bat

@echo off

setlocal enabledelayedexpansion
title Vigilando la Red...
color F0

cls
echo VIGILANDO LA RED...

rem Voy a usar el archivo "equipos.bat" para que recorra
rem todas las direcciones IP de mi LAN, y el resultado
rem lo guardare en el archivo "equiposIP.txt"

rem Creo un bucle infinito para que se ejecute constantemente
for /L %%x in ( 1 ,  0 , 1 ) do (
  
     rem Voy a usar un archivo "auxiliar" para ir guardando
     rem la informacion de cada barrido de IPs despues lo imprimo
     rem por pantalla, y por ultimo lo guardo en "equiposIP.txt"
     echo Dia: !date!  - Hora: !time! > auxiliar.txt
     echo =======================  >> auxiliar.txt
     call equipos.bat >> auxiliar.txt 
     echo.
     echo EQUIPOS CONECTADOS:
     echo.
     type auxiliar.txt
     type auxiliar.txt >> equiposIP.txt
)



---------------------------------------------------------------

Y sería aconsejable que pusieramos un acceso directo a nuestro "vigilante" en la carpeta de "inicio" para que se arranque con cada inicio del sistema

---------------------------------------------------------------

ESTADISTICAS DE NUESTRA RED

Una vez "vigilada" nuestra red con nuestro "vigilante", tenemos el archivo "equiposIP.txt" con valiosa información sobre qué ordenadores se han conectado a nuestra red y a qué horas.

Podemos crear un archivo BAT que me pregunte un dia determinado, y me diga cuantos Pings se han realizado a cada equipo:

estad1.bat

@echo off

setlocal enabledelayedexpansion

cls
echo VER ESTADISTICAS DE UN DIA DETERMINADO
echo ======================================
echo.

echo Introduce dia
set /p dia=

echo Introduce mes:
set /p mes=

echo Introduce anio
set /p anio=


set fecha=%dia%/%mes%/%anio%
title Estadisticas del dia %fecha%

rem Ahora busco las lineas del archivo "equiposIP.txt" que
rem contienen la fecha indicada

find "%fecha%" equiposIP.txt > aux1.txt

echo Estadisticas para el dia %fecha% > aux2.txt
echo. >> aux2.txt
echo Veces   Equipo >> aux2.txt
echo ============== >> aux2.txt
echo. >> aux2.txt

rem En el archivo "aux1.txt", las direcciones MAC que mas
rem aparecen son las que mas tiempo han estado conectadas
rem a la red durante este dia. Voy a recorrer linea por linea
rem dicho archivo, viendo la MAC que tiene cada linea y contando
rem cuantas veces aparece dicha MAC en el archivo, y asi sabre
rem cuanto tiempo ha estado conectado dicho ordenador.
rem el primer for recorre linea por linea el archivo y guarda
rem en la variable %%i la MAC de cada linea

for /f "tokens=3" %%i in (aux1.txt) do (
  rem Primero compruebo si la MAC actual ya la he usado antes

  find "%%i" aux2.txt > nul
  if !errorlevel! == 1 (

    rem este segundo for me sirve para guardar en la variable
    rem "veces" el numero de apariciones de la mac en el archivo

    for /f "tokens=2 delims=:" %%x in ('find /c "%%i" aux1.txt') do (
      set veces=%%x

      rem y ahora guardo en "aux2.txt" una linea por cada mac y
      rem cuantas apariciones tiene en el archivo "aux1.txt"

      echo !veces!      %%i >> aux2.txt
    )
  )
)

cls
sort /r aux2.txt
pause
cls

------------------------------------

Puedo hacer otro achivo BAT que me diga para un determinado mes de un determinado año, cuantos equipos se han conectado a la red, y cuantas veces cada uno:

estad2.bat

@echo off

setlocal enabledelayedexpansion

cls
echo VER ESTADISTICAS DE UN MES Y ANIO DETERMINADO
echo =============================================
echo.

set/p mes=Introduce el numero de mes con dos cifras (p.ej: 06)

set/p anio=Introduce el anio (p.ej: 2012)
title Estadisticas del mes %mes% de %anio%

rem Ahora busco las lineas del archivo "equiposIP.txt" que
rem contienen el mes indicado

find "/%mes%/%anio%" equiposIP.txt > aux1.txt

echo Estadisticas para el mes %mes% del anio %anio% > aux2.txt
echo. >> aux2.txt
echo Veces   Equipo >> aux2.txt
echo ============== >> aux2.txt
echo. >> aux2.txt

rem En el archivo "aux1.txt", las direcciones MAC que mas
rem aparecen son las que mas tiempo han estado conectadas
rem a la red durante este mes. Voy a recorrer linea por linea
rem dicho archivo, viendo la MAC que tiene cada linea y contando
rem cuantas veces aparece dicha MAC en el archivo, y asi sabre
rem cuanto tiempo ha estado conectado dicho ordenador.
rem el primer for recorre linea por linea el archivo y guarda
rem en la variable %%i la MAC de cada linea

for /f "tokens=3" %%i in (aux1.txt) do (
  rem Primero compruebo si la MAC actual ya la he usado antes

  find "%%i" aux2.txt > nul
  if !errorlevel! == 1 (

    rem este segundo for me sirve para guardar en la variable
    rem "veces" el numero de apariciones de la mac en el archivo

    for /f "tokens=2 delims=:" %%x in ('find /c "%%i" aux1.txt') do (
      set veces=%%x

      rem y ahora guardo en "aux2.txt" una linea por cada mac y
      rem cuantas apariciones tiene en el archivo "aux1.txt"

      echo !veces!      %%i >> aux2.txt
    )
  )
)

cls

rem Y ahora muestro ordenado del reves el archivo "aux2.txt"
sort /r aux2.txt
pause
cls










 ---------------------------------------------------------

y otro archivo BAT más complicado, que me muestre las fechas de las conexiones que ha tenido cada equipo, y cuantos Pings se ha hecho a ellos en cada fecha:

@echo off

setlocal enabledelayedexpansion

cls
echo VER LOS DIAS QUE SE HA CONECTADO CADA EQUIPO
echo ============================================
echo.

title Dias que se ha conectado cada equipo

rem Guardo en el archivo "aux1.txt" las lineas que contienen direcciones IP
rem y MAC

find "192.168." equiposIP.txt > aux1.txt

rem y ahora en el archivo "aux2.txt" guardo las diferentes direcciones MAC
rem de los equipos de la red

echo. > aux2.txt

for /f "tokens=3" %%i in (aux1.txt) do (
  rem compruebo si la MAC de la linea actual ya la he
  rem metido antes en el archivo "aux2.txt"

  find "%%i" aux2.txt > nul
  if !errorlevel! == 1 echo %%i >> aux2.txt

)



rem Ya tengo metidas en el archivo "aux2.txt" todas las
rem direcciones MAC distintas de mi red

rem Y ahora cojo de una en una las direcciones mac de "aux2.txt"
rem y voy sacando por pantalla todos los dias en que han estado
rem conectadas

for /f "tokens=1" %%i in (aux2.txt) do (

    echo El equipo con MAC   %%i   se ha conectado:

    rem vacio el archivo "aux3.txt"
    echo. > aux3.txt

    rem este segundo for me sirve para mirar en "aux1.txt" las
    rem fechas en que una direccion MAC se ha conectado a la red

    for /f "tokens=5" %%x in ('find "%%i" aux1.txt') do (
      rem y lo guardo en "aux3.txt"
      echo %%x >> aux3.txt
    )

    rem vacio el archivo "aux4.txt"
    echo. > aux4.txt

    rem ahora en "aux3.txt" tengo las fechas en las que el ordenador
    rem en cuestion se conecto a la red, pero hay muchas repetidas.
    rem Las contare por fecha y lo sacaré por pantalla

    for /f "tokens=1" %%n in (aux3.txt) do (
      find "%%n" aux4.txt > nul
      if !errorlevel! == 1 (
         for /f "tokens=2 delims=:" %%x in ('find /c "%%n" aux3.txt') do (
            set veces=%%x
         )
         echo %%n - !veces! veces >> aux4.txt
      )     
    )
    

    for /f "tokens=2 delims=:" %%x in ('find /c "/" aux4.txt') do (
       echo %%x dias en total
    ) 


    for /f "tokens=2 delims=:" %%x in ('find /c "/" aux3.txt') do (
       echo  y un total de %%x veces
    ) 

    type aux4.txt
  
    pause
    echo.
)

cls

------------------------------------------

Por ultimo podemos hacer una especie de menú desde el que se llame a éstos 3 últimos archivos BAT:

MenuEstadisticas.bat

@echo off

setlocal enabledelayedexpansion
color F0
cls

:menu

title Estadisticas de la Red

echo ...............MENU......................
echo.
echo 1.- Ver estadisticas de un dia determinado
echo 2.- Ver estadisticas de un mes determinado
echo 3.- Ver los dias que se ha conectado cada equipo
echo Q.- Salir
echo.

set/p op=Elige una opcion...

if %op% == 1 call estad1.bat
if %op% == 2 call estad2.bat
if %op% == 3 call estad3.bat
if %op% == q goto salir
goto menu

:salir

cls
title simbolo del sistema
del aux1.txt
del aux2.txt
del aux3.txt
del aux4.txt
color 0F

------------------------------------------------------------------------




























No hay comentarios:

Publicar un comentario