Surge la
necesidad de obtener la direccion ip de varios servidores partiendo de su
nombre, por tal motivo se require realizir un ping a cada uno de los hostname y
obtener asi la dirección IP, cuando son dos o tres es fácil, cuando el número
de hostame supera los 50 o 100 la situación se complica un poco es por eso que
surfeando la web encontré un modulo de Excel en el cual me base para poder
realizar la acción requerida.
Y el modulo
modificado quedo así:
Public Function ip_Equipo(str_Equipo As String) As String
'Esta función recibe
un nombre de equipo (hostname) y, por medio de PING,nos devuelve la IP del
mismo
Dim obj_Shell As
Object 'Objeto shell para ejecutar ping y enviar la salida a un fichero
'temporal
Dim obj_FileSystem As
Object 'Objeto FileSystem para abrir y borrar el fichero temporal
Dim obj_Fichero As
Object 'Objeto File para leer el fichero temporal
Dim
str_ContenidoFichero, sinespacio1, sinespacio2, espacio, espacio1 As String
'variable de trabajo
'Creamos los objetos
FileSystem y Shell
Set obj_Shell = CreateObject("WScript.Shell")
Set obj_FileSystem =
CreateObject("Scripting.FileSystemObject")
'Establecemos el
fichero temporal en la ruta de este libro de Excel y con el nombre
"temp.txt"
str_FicheroTemporal = ThisWorkbook.Path & "\temp.txt"
'Ejecutamos el ping
volcando la salida en el fichero temporal. Sólo esperaremos un eco ("-n
1")
obj_Shell.Run "cmd /c ping -n 1 " & str_Equipo &
" > """ & str_FicheroTemporal &
"""", 0, True
'Abrimos el fichero
temporal sobre el objeto fichero
Set obj_Fichero = obj_FileSystem.OpenTextFile(str_FicheroTemporal, 1,
False)
'Volcamos el contenido
del fichero temporal en str_ContenidoFichero
str_ContenidoFichero =
obj_Fichero.ReadAll
'Cerramos el fichero
temporal y vaciamos su variable
obj_Fichero.Close
Set obj_Fichero = Nothing
'Borramos el fichero
temporal y vaciamos los objetos Shell y FileSystem
obj_FileSystem.DeleteFile (str_FicheroTemporal)
Set obj_FileSystem = Nothing
Set obj_Shell = Nothing
'Si encontramos la
cadena "perdidos = 0 ó Lost = 0" de acuerdo al idioma de nuestro
sistema significa que el equipo respondió
'y por lo tanto
trabajamos con la cadena de texto recibida
If InStr(str_ContenidoFichero, "Lost = 0") > 0 Then
'Buscamos el caracter
"]" para saber la posicion de la direccion ip en la cadena de
caracteres
espacio =
InStr(str_ContenidoFichero, "]")
'recortamos nuestra
cadena hasta la posicion del caracter "]" - 1 desde la izquierda
'recordemos qu el ping
nos arroja un mensaje en su primera linea de la forma: Pinging nom_equipo [xxx.xxx.xxx.xxx]
with 32 bytes of data:
'al buscar y cortar la
cadena nos quedara almacenado en la variable sinespacio1 la cadena: Pinging
nom_equipo [xxx.xxx.xxx.xxx
sinespacio1 =
Left(str_ContenidoFichero, espacio - 1)
'ahora contamos el
numero de caracteres que nos quedaron en nuestra cadena de texto
espacio1 =
Len(sinespacio1)
' Averiguamos la
posicion del caracter "[" el cual indica el inicio de la direccion IP
espacio =
InStr(sinespacio1, "[")
' restamos la posicion
del caracter "[" del largo total de la cadena
espacio = espacio1 -
espacio
'Cortamos nuestra
cadena de texto desde la derecha hasta la posicion resultante de la resta
sinespacio2 =
Right(sinespacio1, espacio)
'enviamos la ip
obtenida a la celda
ip_Equipo =
sinespacio2
'si no se encuentra la
cadena "perdidos = 0 ó Lost = 0" es porque no se concretó el PING
Else
ip_Equipo = "No ping"
End If
End Function
Forma de empleo:
- En Excel debemos tener habilitado el
modo desarrollador
- Se crea un nuevo modulo
- Se crea una columna con los nombres de los equipos
- En una columna diferente se llama la funcion de la forma ip_Equipo(celda_nombre equipo)por ejemplo ip_Equipo(A2)
"Si te fue útil la información HAZ CLICK EN LA PUBLICIDAD DE GOOGLE" visitando nuestros anunciantes, agradeces nuestro trabajo...