Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: piratava en 5 Septiembre 2013, 21:57 pm



Título: script bat con ping
Publicado por: piratava en 5 Septiembre 2013, 21:57 pm
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

Código:
@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:


Título: Re: script bat con ping
Publicado por: Eleкtro en 5 Septiembre 2013, 23:12 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
  1. @Echo OFF
  2.  
  3. Set "IP=1.1.1.1"
  4. Set /A MaxFails=2
  5.  
  6. :Ping
  7. Ping.exe "%IP%" || (Set /A Fails+=1)
  8. If %Fails% EQU %MaxFails% (Goto :OnError)
  9. Goto :Ping
  10.  
  11. :OnError
  12. :: Hacer cosas...
  13. Pause&Exit

Saludos...


Título: Re: script bat con ping
Publicado por: piratava en 5 Septiembre 2013, 23:17 pm
Código
  1. @Echo OFF
  2.  
  3. Set "IP=1.1.1.1"
  4. Set /A MaxFails=2
  5.  
  6. :Ping
  7. Ping.exe "%IP%" || (Set /A Fails+=1)
  8. If %Fails% EQU %MaxFails% (Goto :OnError)
  9. Goto :Ping
  10.  
  11. :OnError
  12. :: Hacer cosas...
  13. 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.

Código:
@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!!


Título: Re: script bat con ping
Publicado por: Eleкtro en 6 Septiembre 2013, 00:02 am
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.

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


Título: Re: script bat con ping
Publicado por: piratava en 6 Septiembre 2013, 00:11 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 :)


Título: Re: script bat con ping
Publicado por: piratava en 6 Septiembre 2013, 00:49 am
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"

Código:
@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:

Código:
@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?


Título: Re: script bat con ping
Publicado por: Eleкtro en 6 Septiembre 2013, 01:56 am
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:

Aquí tienes mi solución, es muy sencillo:

Código
  1. @echo off
  2.  
  3. Set "URL=www.google.es"
  4. Set "Interval=5" & REM Segundos
  5. set "LogFile=.\Ping.txt"
  6.  
  7. :PingMe
  8. Set /A "Count+=1"
  9. Echo [+] Haciendo Ping [%Count%]
  10.  
  11. (
  12. ping "%URL%" | FINDSTR "perdidos.=.0$"
  13. ) || (
  14. Echo Paquetes perdidos.
  15. Echo %DATE% %TIME% >> "%LogFile%"
  16. )  
  17.  
  18. Ping "LOCALHOST" -n "%Interval%" 1>NUL | MORE
  19. GoTo :PingMe


Output:
Código:
[+] 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


Título: Re: script bat con ping
Publicado por: piratava en 8 Septiembre 2013, 18:38 pm
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! ;-)



Título: Re: script bat con ping
Publicado por: Eleкtro en 10 Septiembre 2013, 06:55 am
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!


Título: Re: script bat con ping
Publicado por: Jimbojones en 11 Septiembre 2013, 12:02 pm
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
  1. @echo off
  2.  
  3. for /F "delims=" %%i in ('ping 10.105.253.254 -t') do call :format "%%i"
  4. goto :done
  5.  
  6. :format
  7. echo %date% %time% %1 1>> pinglog.txt
  8. :done
Agradeceria cualquier aporte.
Un saludo,


Título: Re: script bat con ping
Publicado por: Eleкtro en 11 Septiembre 2013, 12:24 pm
@Jimbojones

En lugar de intervenir en el post de otro usuario para preguntar puedes crear un nuevo tema entero para ti solo, además de eso debes usar las etiquetas de código cuando postees código.

No inflingas más normas.

http://foro.elhacker.net





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.

· Solución al primer y al segundo problema:

Preguntar al usuario.

Código
  1. Set /P
Código
  1. Set /?

· Solución al tercer problema:

Aumentar el buffer de la CMD.

Código
  1. REG ADD HKCU\Console\^%%SystemRoot^%%_system32_cmd.exe /V "HistoryBufferSize" /T "REG_DWORD" /D "VALOR HEXADECIMAL" /F
  2. REG ADD HKCU\Console\^%%SystemRoot^%%_system32_cmd.exe /V "NumberOfHistoryBuffers" /T "REG_DWORD" /D "VALOR HEXADECIMAL" /F

PD: La sintaxis del código no funcionará si se ejecuta diréctamente desde la consola.


Si sigues teniendo dudas, crea un post con tu duda.

Saludos!


Título: Re: script bat con ping
Publicado por: Jimbojones en 11 Septiembre 2013, 12:29 pm
Muchas gracias.
Disculpa la vulneración de la norma.