viernes, 27 de enero de 2017

Obtener la direccion IP de un equipo desde Excel

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.

El post realizado por  Juan Carlos Gonzalez Chavarria http://www.todoexpertos.com/usuarios/jcgonzalez31 

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...