Script batch para ping

Iniciado por terrateck, 18 Junio 2013, 18:43 PM

0 Miembros y 2 Visitantes están viendo este tema.

terrateck

Hola a todos,

Me gustaría que me ayudaseis a crear un batch para hacer ping y almacenar los resultados. Hasta ahora lo que he conseguido hacer es:

@echo off
setlocal
for /F "delims=" %%i in ('ping google.es -t') do echo %date% %time% %%i 1>> output.txt


Que al finalizar almacena los resultados en un documento TXT de salida.

Pero lo que me gustaría conseguir es una utilidad que vaya haciendo un ping solo cada 5 o 10 seg y almacene los datos en un TXT únicamente cuando se pierda un paquete, con la hora y la fecha correspondiente y en ese mismo momento, sin tener que finalizar la ejecución.
¿Sería posible?

Gracias.

Meine programmen

Quizas esto te sirva:

@ECHO OFF
SET /P numero=¨Numero de segundos entre cada ping?
:Ciclo
SET prueba=
ping localhost -n %numero% >nul
(ping google.es
echo %DATE% %TIME%)>1.txt
FOR /F "tokens=*" %%A IN ('findstr /N "    (0% perdidos)," 1.txt') DO (SET prueba=%%A)
IF NOT "%prueba%"=="" (GOTO Ciclo)
FOR /F "tokens=*" %%B IN ('TYPE 1.txt') DO (SET fecha=%%B)
echo Paquete perdido
echo Paquete perdido %fecha%>>"Paquetes perdidos.txt"
GOTO Ciclo
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


terrateck

Gracias por la ayuda, Meine programmen.

Lo he probado, pero tras introducir el numero de segundos y generarse el fichero 1.txt, me da el error de la sintaxis del comando no es correcta, y se cierra directamente.

¿Dónde puede estar el problema?

Meine programmen

#3
Creo (Y solo creo) que ya lo arregle
@ECHO OFF
setlocal enabledelayedexpansion
SET /P numero=¨Numero de segundos entre cada ping?
:Ciclo
SET prueba=
ping localhost -n %numero% >nul
(ping google.es
echo %DATE% %TIME%)>1.txt
find /C /I "(0%% perdidos" "1.txt">2.txt
FOR /F "tokens=*" %%A IN ('TYPE 2.txt') DO (SET prueba=!prueba!%%A)
SET prueba=%prueba:---------- 1.TXT:=%
SET prueba=%prueba: =%
IF NOT "%prueba%"=="0" (GOTO Ciclo)
FOR /F "tokens=*" %%B IN ('TYPE 1.txt') DO (SET fecha=%%B)
echo Paquete perdido
echo Paquete perdido %fecha%>>"Paquetes perdidos.txt"
GOTO Ciclo

Cuando no hay paquetes perdidos funciona como deberia.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


terrateck

#4
Hola,
Ya lo he probado y funciona correctamente, es justo lo que quería.
Gracias por la ayuda prestada.

Una cuestión: ¿por que en la instrucción find se busca "(0%% perdidos"? Me refiero al doble signo de porcentaje.

Royca3

Utiliso el Batch de Meine programmen pero no me guarda los resultados? es porque no hay problema y ningún paquete se pierde?

Saludos.
Homo erectus

engel lex

yo estuve haciendo algo similar XD termine haciendolo en C y al final luego de una semana tenia una masa de 300.000 lineas que no pude analizar XD

si consigo el exe te lo publico aqui
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Meine programmen

Cita de: terrateck en 19 Junio 2013, 01:06 AM
Una cuestión: ¿por que en la instrucción find se busca "(0%% perdidos"? Me refiero al doble signo de porcentaje.
Desde cmd el comando si que llevaria solo un signo %, pero en un .bat tienes que poner dos para que funcione. Con el comando FOR pasa lo mismo. No se exactamente por qué, pero es así.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


engel lex

aquí está

https://mega.co.nz/#!udQhzbIJ!MWfyeSP4ttCjbNdZ3EL8xClyVlp01-c_yRi_4dEo-jA


el crea en la carpeta donde se ejecute un archivo llamado ping.txt con la info en el formato

2013-06-19 10:47AM. - Respuesta desde 201.248.76.20: bytes=32 tiempo=20ms TTL=59

si lo ejecutas
ping.exe -t 3
se hará ping cada 3 segundos (o los segundos que establescas luego de "-t") si no especificas nada, hará ping cada 1 segundo (sumado a la espera del ping, me dio pereza corregir eso)

si el ping falla puede decir que "tiempo de espera agotado" o simplemente dejarlo en blanco si el host lo da inaccesible... (tambien me dio pereza corregir eso)

hace ping contra google.com por si a las dudas...

el continua escribiendo el archivo donde lo dejó si lo cierras... espero te sea útil
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

terrateck

Cita de: Royca3 en 19 Junio 2013, 01:49 AM
Utiliso el Batch de Meine programmen pero no me guarda los resultados? es porque no hay problema y ningún paquete se pierde?

Saludos.

Efectivamente si no hay ningún problema con la conexión no te generará ningún resultado. Prueba a deshabilitar la conexión a la red mientras se ejecuta y así podrás comprobar que guarda los resultados en el fichero paquetesperdidos.txt.

Cita de: Meine programmen en 19 Junio 2013, 10:18 AM
Desde cmd el comando si que llevaria solo un signo %, pero en un .bat tienes que poner dos para que funcione. Con el comando FOR pasa lo mismo. No se exactamente por qué, pero es así.

Es curioso, gracias por la información.

Cita de: engelx en 19 Junio 2013, 10:19 AM
aquí está

https://mega.co.nz/#!udQhzbIJ!MWfyeSP4ttCjbNdZ3EL8xClyVlp01-c_yRi_4dEo-jA


el crea en la carpeta donde se ejecute un archivo llamado ping.txt con la info en el formato

2013-06-19 10:47AM. - Respuesta desde 201.248.76.20: bytes=32 tiempo=20ms TTL=59

si lo ejecutas
ping.exe -t 3
se hará ping cada 3 segundos (o los segundos que establescas luego de "-t") si no especificas nada, hará ping cada 1 segundo (sumado a la espera del ping, me dio pereza corregir eso)

si el ping falla puede decir que "tiempo de espera agotado" o simplemente dejarlo en blanco si el host lo da inaccesible... (tambien me dio pereza corregir eso)

hace ping contra google.com por si a las dudas...

el continua escribiendo el archivo donde lo dejó si lo cierras... espero te sea útil

Gracias engelx. También había pensado hacerlo en C que lo controlo más pero al no ser demasiado complejo pensé que no merecía la pena y esto sería más rápido. De todas formas sería interesante ver como lo implementaste, ¿no tendrás el código por ahí para echarle un vistazo?

Lo suyo es ajustar el tiempo entre pings a la calidad de la conexión, porque sino como dices se te va a llenar el logs de miles de entradas xD.
Yo lo voy a usar porque actualmente tengo microcortes de conexión, y el log del cable router no es demasiado fiable.  Estoy intentando que la operadora lo solucione y esto me es de gran ayuda para diagnosticarlo.