lunes, 24 de enero de 2011

Pingeando Hosts

Que onda! jajaja no se con quien hablo si nadie lee esto, pero para las 2 personas que lo leen de vez en vez, dejo un pequeño post.

El otro día (hace como 1 mes pero bueno =P ) me pidieron en el trabajo que sacara las IPs de un grupo de computadoras de las cuales habia hecho un inventario, tenia las MAC address de todas nombres y otra info pero no tenia sus IPs, pero tenemos muchas que son estaticas y otras dinámicas en las vlans del jale, la verdad es que me dio flojera ir a revisar a mano las 40 computadoras para obtener sus ips, asi que decidi practicar un poco de batch scripting y me avente un script pequeñito que pingea los hosts desde un input hosts file separado por new lines, luego pingea las compus y el output lo graba a un txt que tu escogas o a uno default si no se especifica, le intente agregar algunas funciones de ayuda para que estuviera mas user friendly pero bueno sin mas rodeos les dejo mi codigo ojala le sirva a alguien y si no me diverti un rato =P



@echo off
GOTO start

====================== Description ======================
El programa lee la lista de hosts de un archivo 
y graba los pings en un archivo de nombre hostIPs.txt
al correr el programa es necesario pasar (como parametro)
el nombre del archivo que contiene los nombre de las
computadoras que se desean pingear.

========================= Usage =========================
Usage: pingHosts input.txt optionalOutput.txt

input.txt = Nombre de archivo de entrada con nombres 
     de los hosts que se desean pingear.

optionalOutput.txt = Nombre del archivo de salida donde se 
     grabaran las IPs de los hosts, si no se especifica 
     un nombre el programa genera uno por default con 
     las IPs de los equipos pingeados el nombre de 
     este archivo es hostIPs.txt

========================= ------ =========================

Setlocal EnableDelayedExpansion

========================= ------ =========================

Reminder about command above!!

If a batch script does not use SETLOCAL and ENDLOCAL then all 
variables will be Global - visible and modifiable by other scripts.

Setting Delayed Expansion will cause each variable to be expanded 
at execution time rather than at parse time. 

::================== Personal Reminder ==================
:: los paramentros .==. significan empty param
::=======================================================

*********************************************************
*==================== Program Logic ====================*
*********************************************************

:start

::Variables declarations
::======================

::input file
set arg1=%1

::output file
set arg2=%2

::default output file name
set temp="hostIPs.txt"

::Temporal handler var
set temp2=temp.txt


::====================== Parameters handler ======================

IF %1.==. (GOTO NoParam)ELSE IF %2.==. (GOTO doPingsDefault)ELSE (GOTO doPingsOutput)

::------------------------------------------
:doPingsDefault
IF EXIST %arg1% (GOTO pingFile)ELSE (GOTO fileNotFound)
GOTO End
::------------------------------------------

::------------------------------------------
:doPingsOutput
IF EXIST %arg1% (GOTO pingWithParams)ELSE (GOTO fileNotFound)
GOTO End
::------------------------------------------

::------------------------------------------
:pingWithParams

call:fileExists
call:workingMsg

FOR /F "tokens=1" %%A IN (%arg1%) DO (
ping %%A >> %arg2%
echo. >> %arg2%
echo ************************************* >> %arg2%)
echo. >> %arg2%
GOTO End
::------------------------------------------

::------------------------------------------
:pingFile
set arg2==%temp%
::Falling back to default output name hostIPs.txt

call::workingMsg

FOR /F "tokens=1" %%A IN (%arg1%) DO (
ping %%A >> %arg2%
echo. >> %arg2%
echo ************************************* >> %arg2%)
echo. >> %arg2%
echo file hostIPs.txt has been generated with hostnames IP addresses
GOTO End
::-------------------------------------------

::-------------------------------------------
:NoParam
echo Not parameters were given! at least input hosts file is needed
GOTO EndBad
::-------------------------------------------

::-------------------------------------------
:workingMsg
echo Working...please wait while I ping hosts
GOTO:EOF
::-------------------------------------------

::-------------------------------------------
:fileExists
IF NOT EXIST %arg1% (GOTO fileNotFound)
GOTO:EOF
::-------------------------------------------

::-------------------------------------------
:fileNotFound
echo The especified source file %arg1% was not found!!!
GOTO:EOF
::-------------------------------------------

::-------------------------------------------
:End
exit /b
::-------------------------------------------

::-------------------------------------------
:EndBad
@echo:
echo Usage $:pingHosts input.txt optionalOutput.txt
@echo:
echo If not output file name is given, the program assigns the name 
echo hostIPs.txt to the output file, the input file must contain the 
echo host names desired to be pinged, and separeted by new lines.

echo.
exit /b
::-------------------------------------------



Update:La semana pasada le hice unos cambios esteticos y le agrege unos comments la version que habia subido no era la mas nueva =P disculpen el pochismo del programa =) espero les sirva

1 comentario:

  1. D:
    lo malo es que a mi no pusieron a sacar las IPs, eso se lo dejaron al otro practicante (que por cierto está estudiando IIS), a mi me pusieron a checar si les sirve el tray del CD y si tienen los puertos USBs bloqueados, asi que yo si tengo que ir a checarlas todas físicamente :(

    ResponderEliminar

Deja tu comentario aquí, cuenta que te parecio el artículo o simplemente saluda!