Passa al contenuto principale
Recentemente mi è stato chiesto di analizzare un file di traccia, della durata di soli 161 secondi e contenente poco più di 2,6 milioni di frame. Sono rimasto sorpreso nello scoprire che circa il 75% di quei frame erano richieste ping o risposte ping. Se non avessi riconosciuto l'indirizzo IP di origine, avrei concluso che l'obiettivo era sotto attacco denial of service. Invece ho scoperto che stavano usando l'argomento "run_forever" sul comando ping di STCP per monitorare la raggiungibilità dell'obiettivo.

 

A differenza del comando ping presente nella maggior parte dei sistemi UNIX o Linux, il comando ping di STCP non effettua pause tra la ricezione di una risposta ping e la richiesta ping successiva. Poiché il numero predefinito di ping è solo 4, questo non rappresenta un problema significativo. Tuttavia, quando il numero di richieste viene aumentato utilizzando l'argomento count o l'argomento run_forever, ciò può creare un carico significativo sul sistema, sull'adattatore Ethernet e sulla rete. Ciò rende il comportamento predefinito del comando ping di STCP totalmente inadatto al monitoraggio a lungo termine di un host di destinazione.

 

Tuttavia, solo perché il comportamento predefinito non è adatto, ciò non significa che non sia possibile utilizzare il comando ping per il monitoraggio a lungo termine. Il trucco consiste nell'eseguire ripetutamente il comando inviando una richiesta ping alla volta, invece di eseguire il comando una sola volta e inviare un flusso continuo di richieste ping. La seguente macro eseguirà questa operazione.
macro di 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

 

Come potete vedere, i primi due argomenti vengono passati direttamente al comando ping e corrispondono agli argomenti host e timeout di ping. Il timeout predefinito di ping è di 15 secondi, ma ritengo che sia troppo lungo e nella macro l'ho modificato a 1 secondo. Naturalmente è possibile regolarlo sia nella macro che fornendo un valore come argomento. Il terzo argomento è il numero di secondi di pausa tra i ping, il valore predefinito è 1 secondo. Poiché l'esecuzione della macro e il caricamento e l'esecuzione del comando ping richiedono tempo, il tempo effettivo tra i ping è leggermente più lungo. Packet_monitor ha mostrato tempi compresi tra 1,05 e 1,1 secondi. L'argomento finale è qualcosa che il ping UNIX o Linux non fornisce: un timestamp per ogni ping, in modo da poter capire quando il target smette di rispondere e quando ricomincia. Se non si desidera visualizzare i timestamp, è possibile disattivarli con l'argomento -no_timestamp.

 

Esempio di output di 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