script bat con ping

Iniciado por piratava, 5 Septiembre 2013, 21:57 PM

0 Miembros y 1 Visitante están viendo este tema.

piratava

Hola,

Lo he intentado de varias formas y aun no puedo.

Les cuento que tengo un servidor pptp en linux y a veces se desconecta solo y para resumir la conexion hay qye volver a marcar el login.

Ese no es mi problema, lo que necesito que un script en vbs, bat o c que haga un ping constante a la ip del servidor y que si el ping falla X cantidad de veces ejecute un .bat.

Ojala alguien me pueda ayudar.

Dejo el script que hice en .bat para conectar al servidor por si a alguien le sirve


@echo off

sleep 3
rasdial SERVIDOR /DISCONNECT
sleep 3
rasdial SERVIDOR USUARIO CONTRASEÑA
sleep 7
ROUTE delete x.x.x.x MASK x.x.x.x x.x.x.x
sleep 5
ROUTE -p add x.x.x.x MASK x.x.x.x x.x.x.x
sleep 10
NET USE UNIDAD: /DELETE /YES
sleep 10
NET USE UNIDAD: "\\x.x.x.x\Archivos Server" CONTRASEÑA /USER:USUARIO@DOMINIO /PERSISTENT:no
explorer UNIDAD:

Eleкtro

Cita de: piratava en  5 Septiembre 2013, 21:57 PM
necesito que un script en vbs, bat o c que haga un ping constante a la ip del servidor y que si el ping falla X cantidad de veces ejecute un .bat.

Código (dos) [Seleccionar]
@Echo OFF

Set "IP=1.1.1.1"
Set /A MaxFails=2

:Ping
Ping.exe "%IP%" || (Set /A Fails+=1)
If %Fails% EQU %MaxFails% (Goto :OnError)
Goto :Ping

:OnError
:: Hacer cosas...
Pause&Exit


Saludos...








piratava

#2
Cita de: EleKtro H@cker en  5 Septiembre 2013, 23:12 PM
Código (dos) [Seleccionar]
@Echo OFF

Set "IP=1.1.1.1"
Set /A MaxFails=2

:Ping
Ping.exe "%IP%" || (Set /A Fails+=1)
If %Fails% EQU %MaxFails% (Goto :OnError)
Goto :Ping

:OnError
:: Hacer cosas...
Pause&Exit


Saludos...

Funciona bien el codigo gracias!, pero no me ejecuta el ":OnError", por ejemplo para probar le dije que llame a explorer pero no lo hace.

@Echo OFF

Set "IP=10.0.0.254"
Set /A MaxFails=3

:Ping
Ping.exe "%IP%" || (Set /A Fails+=1)
If %Fails% EQU %MaxFails% (Goto :OnError)
Goto :Ping

:OnError
explorer c:
Pause&Exit





[MOD] NO HAGAS DOBLE POST.

Si funciona, disculpa!!!

Entendi que el MaxFails es a los pings, entonces le puse 2 no pasaba anda, pero es al proceso completo de pings, es decir, los 4 pings erroneos.

Gracias!!

Eleкtro

Cita de: piratava en  6 Septiembre 2013, 00:00 AMEntendi que el MaxFails es a los pings, entonces le puse 2 no pasaba anda, pero es al proceso completo de pings, es decir, los 4 pings erroneos.

Así es,
Si quieres algo más preciso como lo que comentas entonces puedes usar un "FOR /F + FIND" para filtrar la salida del comando Ping.exe para contar los paquetes perdidos.

Saludos








piratava

Cita de: EleKtro H@cker en  6 Septiembre 2013, 00:02 AM
Así es,
Si quieres algo más preciso como lo que comentas entonces puedes usar un "FOR /F + FIND" para filtrar la salida del comando Ping.exe para contar los paquetes perdidos.

Saludos

No, asi esta bien, muchas gracias.

Como puedo mejorar mi script de inicio de pptp? me puedes ayudar con eso? Gracias :)

piratava

#5
Tengo el siguiente problema:

Cuando no hay ping, me ejecuta el "ping.bat" sin problemas.

Pero cuando hay ping igual se crea un loop

Te cuento, tengo 2 bat, uno llamado "ping.bat" y el pptp llamado "cgallardo.bat"

Entonces, cuando enciendo el equipo abro "cgallardo.bat"

@echo off

sleep 3
rasdial SERVIDOR-SANTIAGO /DISCONNECT
sleep 3
rasdial SERVIDOR-SANTIAGO user pass
sleep 7
ROUTE delete 10.0.0.0 MASK 255.255.255.0 192.168.210.0
sleep 5
ROUTE -p add 10.0.0.0 MASK 255.255.255.0 192.168.210.0
sleep 20
NET USE Z: "\\10.0.0.254\Archivos Server" pass /USER:user@dominio /PERSISTENT:no
ping.bat


y conecta sin problemas. Y desde alli llamo a "ping.bat" entonces para que cuando falle vuelva a llamar a "cgallardo.bat" lo deje asi:

@Echo OFF

Set "IP=10.0.0.254"
Set /A MaxFails=1

:Ping
Ping.exe "%IP%" || (Set /A Fails+=1)
If %Fails% EQU %MaxFails% (Goto :OnError)
Goto :Ping

:OnError
cgallardo.bat


el bat "ping.bat" ejecuta sin problemas, pero a pesar de tener ping vuelve a llamar a "cgallardo.bat" me corta el pptp y lo vuelve a marcar.

Como puedo configurar el parametro FIND para que me lea un texto como "Tiempo de espera agotado para esta solicitud." que es error cuando no hay ping, si se puede configurar asi, seria ideal ya que si detecta ej: 4 ping erroneos llamaria a "cgallardo.bat" y no en otro momento, me puedes ayudar por favor?

Eleкtro

No se si te he entendido bien pero en el script "ping.bat" debes restaurar el valor de la variable "Fails" a "0" después de llamar a "cgallardo.bat", de lo contrario el resto de pings siempre van a tomarse como fallidos por que el valor de la variable seguirá subiendo constántemente...

Y bueno, sobre lo de filtrar la salida de Ping te cito una respuesta mía en otro post:

Cita de: EleKtro H@cker en 19 Junio 2013, 21:07 PM
Aquí tienes mi solución, es muy sencillo:

Código (dos) [Seleccionar]
@echo off

Set "URL=www.google.es"
Set "Interval=5" & REM Segundos
set "LogFile=.\Ping.txt"

:PingMe
Set /A "Count+=1"
Echo [+] Haciendo Ping [%Count%]

(
ping "%URL%" | FINDSTR "perdidos.=.0$"
) || (
Echo Paquetes perdidos.
Echo %DATE% %TIME% >> "%LogFile%"
)  

Ping "LOCALHOST" -n "%Interval%" 1>NUL | MORE
GoTo :PingMe



Output:
[+] Haciendo Ping [1]
   Paquetes: enviados = 4, recibidos = 4, perdidos = 0

[+] Haciendo Ping [2]
   Paquetes: enviados = 4, recibidos = 4, perdidos = 0

[+] Haciendo Ping [3]
Paquetes perdidos.


Saludos!

Combínalo con las variables "Fails" y "MaxFails" y ya lo tienes listo.

Saludos








piratava

Estimado,

Trate de hacerlo de varias formas pero soy novato con esto.

Me puedes volver a ayudar por favor? la idea es que detecte cuando no hay ping a una ip, y genere el script de marcado, y una vez que ya este marcado el pptp y vuelva el ping a la ip el proceso de monitoreo vuelva a fucionar.

Gracias! ;-)


Eleкtro

Prácticamente te lo he dado todo hecho sin que tengas que hacer ningún esfuerzo mayor,
solo tienes que colocar cada cosa en su sitio, lee un poco sobre el lenguaje para aprender lo básico, o espera la respuesta de algún otro compañero.

Saludos!








Jimbojones

#9
Buenos días.
Estoy enfrascado con un bat.
La idea seria, crear un programa que hiciese un ping continuo a la IP introducida por teclado.
Los resultados del ping, se guardan en un txt, con la fecha y la hora de cada uno de ellos, y al detener el ping, se almacenan en el txt las estadisticas globales de los pings mientras el programa estuvo corriendo.

Esta versión solo me ha planteado 3 pequeños problemas.
1º) Para modificar la IP del ping, tenía que modificarla en el codigo del programa
2º) Para modificar le nombre del txt en el que se guardaba la información tenia que modificar el nombre en el codigo del programa.
3º)Almacenaba la información en la memoria buffer, por lo que si tenia el programa corriendo durante 24 horas, al detenerlo, solo me presentaba las estadisticas globales de los pings de las 24 horas, pero, solo mostraba los ultimos pings.

Código (dos) [Seleccionar]
@echo off
setlocal

for /F "delims=" %%i in ('ping 10.105.253.254 -t') do call :format "%%i"
goto :done

:format
echo %date% %time% %1 1>> pinglog.txt
:done

Agradeceria cualquier aporte.
Un saludo,