Consultas, desarrollo de programas y petición de presupuestos:

martes, 28 de agosto de 2012

Haciendo Ping en Gambas

Otro programa antiguo:

¿que es un ping? según wikipedia
Ping es una utilidad diagnóstica en redes de computadoras que comprueba el estado de la conexión del host local con uno o varios equipos remotos por medio de el envío de paquetes ICMP de solicitud y de respuesta. Mediante esta utilidad puede diagnosticarse el estado, velocidad y calidad de una red determinada.
Ejecutando Ping de solicitud, el Host local envía un mensaje ICMP, incrustado en un paquete IP. El mensaje ICMP de solicitud incluye, además del tipo de mensaje y el código del mismo, un número identificador y una secuencia de números, de 32 bits, que deberán coincidir con el mensaje ICMP de respuesta; además de un espacio opcional para datos.
Muchas veces se utiliza para medir la latencia o tiempo que tardan en comunicarse dos puntos remotos, y por ello, se utiliza el término PING para referirse al lag o latencia de la conexión en los juegos en red.
La navaja suiza del técnico en redes
El comando ping, a pesar de su sencillez, es una eficaz ayuda para la verificación de redes durante su configuración y para la detección de fallos en la misma. Asumamos como ejemplo que hemos configurado un PC con la dirección IP 192.168.1.100 en una red en la cual, en el mismo tramo físico se encuentra otro PC con la dirección IP 192.168.1.101, todo conectado a Internet a través de una puerta de enlace con dirección IP 192.168.1.1.
La ejecución de ping localhost permite verificar si el conjunto de protocolos TCP/IP está correctamente instalado y en funcionamiento. Es enviado y respondido internamente por el propio equipo.
Si ejecutamos ping 192.168.1.100 (IP del propio equipo), el comando es enviado a la red y recibido por el propio equipo, el cual envía la respuesta a la red y la recoge de ella. Esto permite verificar si la tarjeta de red está funcionando adecuadamente.

Si ejecutamos ping 192.168.1.101 (IP del equipo próximo) podremos verificar si el cableado del equipo hacia la red funciona correctamente.
Si ejecutamos ping 192.168.1.1 (IP de la puerta de enlace) podremos verificar si el cableado general de la red funciona correctamente.
Si ejecutamos ping 91.198.174.2 (IP de Wikipedia) podremos verificar si la conexión a Internet está funcionando.
Si ejecutamos ping es.wikipedia.org (o cualquier otra URL conocida) podremos verificar si están correctamente configuradas las IP de los servidores DNS.
Estas sencillas acciones permiten la detección específica de errores en muy poco tiempo, contrariamente al método intuitivo de probemos a ver qué pasa.
Bueno, contestando una pregunta del foro de Gambas Org Es, he hecho este pequeño programa.
Tienes que crear un listbox1,TextLabel1,un textobox llamalo TextBoxIP, y un boton llamado ButtonComprobar

Este es el código fuente:
PUBLIC SUB ButtonComprobar_Click()
DIM hproc AS Process
DIM buf AS String
DIM sCads AS NEW String[]
DIM a AS Integer
DIM NombreArchivoSalida AS String
DIM mensaje AS String
ListBox1.Clear
NombreArchivoSalida = User.home & "/print.txt"
IF Exist(NombreArchivoSalida) THEN
KILL NombreArchivoSalida
END IF
'PRINT "ping -c3 -i 2 "; TextBoxIP.Text & " >"; NombreArchivoSalida
hproc = SHELL ("ping -c3 -i 2 " & TextBoxIP.Text & " >" & NombreArchivoSalida)
DO WHILE hproc.State = Process.Running
WAIT 0.1
TextLabel1.text = "espere..."
LOOP
TextLabel1.text = "Salida generada"
sCads = Split(File.Load(NombreArchivoSalida), "n")
FOR a = 0 TO scads.Count - 1
ListBox1.Add(Str(sCads[a]))
IF InStr(scads[a], "0% packet loss") <> 0 THEN
mensaje = "No hay paquetes perdidos"
ENDIF
' PRINT scads[a]
NEXT
IF mensaje = "No hay paquetes perdidos" THEN
Message.Info("No hay paquetes perdidos")
ELSE
Message.Info("Ha habido algun problema")
ENDIF
END

Os explico el código:
La idea es hacer un ping a una direccion dada en un textbox y la salida que genera en pantalla pasarla a un archivo de texto, eso lo hacemos con la siguiente orden, anteriormente hemos definido un proceso:
DIM hproc AS Process
.....
.....

hproc = SHELL ("ping -c3 -i 2 " & TextBoxIP.Text & " >" & NombreArchivoSalida)
Para controlar si ha terminado de ejecutar esta orden, mediante este bucle vemos el estado de proceso:
DO WHILE hproc.State = Process.Running
WAIT 0.1
TextLabel1.text = "espere..."
LOOP

Ahora leemos el archivo de salida y lo asignamos a un arrays de cadenas (sCads), “troceando” el archivo de salida mediante la orden Split y el caracter “n”:
sCads = Split(File.Load(NombreArchivoSalida), "n")
Y escribimos en un listbox su contenido, comprobando que si en alguna parte de la linea (orden InStr) viene el texto “0% packet loss”, asignamos a la variable mensaje “No hay paquetes perdidos”
FOR a = 0 TO scads.Count - 1
ListBox1.Add(Str(sCads[a]))
IF InStr(scads[a], "0% packet loss") <> 0 THEN
mensaje = "No hay paquetes perdidos"
ENDIF
' PRINT scads[a]
NEXT

Mensaje final: si la variable mensaje vale “No hay paquetes perdidos”, nos muestra un mensaje de informacion “No hay paquetes perdidos”, en caso contrario muestra que otro mensaje diciendo que “Ha habido algun problema” (puede haber varios problemas: no estar conectado a la red, no se ha devuelto los paquetes enviados de información, etc…)
IF mensaje = "No hay paquetes perdidos" THEN
Message.Info("No hay paquetes perdidos")
ELSE
Message.Info("Ha habido algun problema")
ENDIF

Nota:
Para evitar errores, al principio del programa, hemos incluido una linea que hace que borre (si existe) un archivo anterior de salida.
NombreArchivoSalida = User.home & "/print.txt"
IF Exist(NombreArchivoSalida) THEN
KILL NombreArchivoSalida
END IF







Enlace de descarga: Descarga



No hay comentarios:

Publicar un comentario