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...
Use tu codigo pero no me funciona.
ResponderEliminar