Ir al contenido principal
Recientemente me pidieron que analizara un archivo de rastreo, que solo duraba 161 segundos y contenía algo más de 2,6 millones de tramas. Me sorprendió descubrir que aproximadamente el 75 % de esos fotogramas eran solicitudes o respuestas de ping. Si no hubiera reconocido la dirección IP de origen, habría llegado a la conclusión precipitada de que el objetivo estaba sufriendo un ataque de denegación de servicio. En cambio, descubrí que estaban utilizando el argumento «run_forever» en el comando ping de STCP para supervisar la accesibilidad del objetivo.

 

A diferencia del comando ping de la mayoría de los sistemas UNIX o Linux, el comando ping de STCP no hace una pausa entre la recepción de una respuesta ping y la siguiente solicitud ping. Dado que el número predeterminado de pings es solo 4, esto no supone un problema significativo. Sin embargo, cuando se aumenta el número de solicitudes utilizando el argumento count o se utiliza el argumento run_forever, esto puede generar una carga significativa en el sistema, el adaptador Ethernet y la red. Esto hace que el comportamiento predeterminado del comando ping de STCP sea totalmente inadecuado para la supervisión a largo plazo de un host de destino.

 

Sin embargo, el hecho de que el comportamiento predeterminado no sea adecuado no significa que no se pueda utilizar el comando ping para la supervisión a largo plazo. El truco consiste en ejecutar repetidamente el comando enviando una solicitud de ping cada vez, en lugar de ejecutar el comando una sola vez y enviar un flujo continuo de solicitudes de ping. La siguiente macro lo hará.
Macro de comando ping_forever
& ping_forever begins here
&
& Version 1.0 09-08-30
& [email protected]
&
&begin_parameters
TARGET   target:string,required
SECONDS  seconds:number=1
TIMEOUT  timeout:number=1
TIMESTAMP switch(-timestamp),=1
&end_parameters
&
&label again
display_line
&if &TIMESTAMP& &then display_line *** (date).(time) ***
ping &TARGET& -count 1 -timeout &TIMEOUT&
sleep -seconds &SECONDS&
&goto again
&
& ping_forever ends here

 

Como puede ver, los dos primeros argumentos se pasan directamente al comando ping y corresponden a los argumentos host y timeout de ping. El tiempo de espera predeterminado de ping es de 15 segundos, pero creo que es demasiado largo, por lo que en la macro lo he cambiado a 1 segundo. Por supuesto, puede ajustarlo en la macro o proporcionando un valor como argumento. El tercer argumento es el número de segundos de pausa entre pings, el valor predeterminado es 1 segundo. Debido a que se necesita tiempo para ejecutar la macro y cargar y ejecutar el comando ping, el tiempo real entre pings es un poco más largo. Packet_monitor mostró tiempos entre 1,05 y 1,1 segundos. El último argumento es algo que el ping de UNIX o Linux no le proporcionará: una marca de tiempo para cada ping, de modo que pueda saber cuándo deja de responder el destino y cuándo vuelve a hacerlo. Si no desea las marcas de tiempo, puede desactivarlas con el argumento -no_timestamp.

 

Ejemplo de salida de ping_forever
ping_forever 164.152.77.6
*** 09-08-30.11:45:38 ***
Pinging host 164.152.77.6 : 164.152.77.6
ICMP Echo Reply:TTL 60 time = 2 ms
Host 164.152.77.6 replied to the ping
*** 09-08-30.11:45:40 ***
Pinging host 164.152.77.6 : 164.152.77.6
ICMP Echo Reply:TTL 60 time = 2 ms
Host 164.152.77.6 replied to the ping
*** 09-08-30.11:45:41 ***
Pinging host 164.152.77.6 : 164.152.77.6
ping: No reply. Time Out !!
Host 164.152.77.6 didn't reply to the ping
*** 09-08-30.11:45:44 ***
Pinging host 164.152.77.6 : 164.152.77.6
ping: No reply. Time Out !!
Host 164.152.77.6 didn't reply to the ping
*** 09-08-30.11:45:47 ***
Pinging host 164.152.77.6 : 164.152.77.6
ICMP Echo Reply:TTL 60 time = 4 ms
Host 164.152.77.6 replied to the ping
*** 09-08-30.11:45:48 ***
Pinging host 164.152.77.6 : 164.152.77.6
ICMP Echo Reply:TTL 60 time = 3 ms
Host 164.152.77.6 replied to the ping