Introduzione

Il comando ping è una delle utility più utilizzate per la risoluzione dei problemi, il test e la diagnosi dei problemi di connettività di rete.

Il ping funziona inviando uno o più pacchetti di richieste echo ICMP (Internet Control Message Protocol) a un IP di destinazione specificato sulla rete e attende una risposta. Quando la destinazione riceve il pacchetto, risponderà con una risposta echo ICMP.

Con il comando ping, è possibile determinare se un IP di destinazione remoto è attivo o inattivo. È inoltre possibile trovare il ritardo di andata e ritorno nel comunicare con la destinazione e verificare se vi è una perdita di pacchetti.

L'utility ping fa parte del pacchetto iputils (o iputils-ping), che è preinstallato su quasi tutte le distribuzioni Linux. ping è disponibile anche su Windows, macOS e FreeBSD.

Come utilizzare il comando Ping

La sintassi per il comando ping è la seguente:

ping [OPTIONS] DESTINATION

Per illustrare meglio come funziona il comando ping, eseguiamo il ping google.com:

ping google.com

L'output sarà simile al seguente:

PING google.com (216.58.206.46) 56(84) bytes of data.                                                                             
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=1 ttl=52 time=23.5 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=2 ttl=52 time=23.3 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=3 ttl=52 time=23.0 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=4 ttl=52 time=23.4 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=5 ttl=52 time=23.5 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=6 ttl=52 time=23.8 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=7 ttl=52 time=24.0 ms                                           
64 bytes from mil07s07-in-f14.1e100.net (216.58.206.46): icmp_seq=8 ttl=52 time=23.5 ms                                           
^C                                                                                                                                
--- google.com ping statistics ---                                                                                                
8 packets transmitted, 8 received, 0% packet loss, time 7009ms                                                                    
rtt min/avg/max/mdev = 23.007/23.489/24.000/0.285 ms

Il comando ping risolve il nome di dominio in un indirizzo IP e inizia a inviare i pacchetti ICMP all'IP di destinazione. Se l'IP di destinazione è raggiungibile, risponderà e il comando ping stampa una riga che include i seguenti campi:

  • Il numero di byte di dati. Il valore predefinito è 56, che si traduce in 64 byte di dati ICMP -64 bytes
  • L'indirizzo IP della destinazione - from muc11s01-in-f14.1e100.net (172.217.22.206)
  • Il numero di sequenza ICMP per ciascun pacchetto. icmp_seq=1
  • Il Time to Live. - ttl=53- Come funziona TTL?
  • Il tempo di ping, misurato in millisecondi, che è il tempo di andata e ritorno per il pacchetto per raggiungere l'host e per la risposta per tornare al mittente. -time=41.4 ms

Per impostazione predefinita, l'intervallo tra l'invio di un nuovo pacchetto è di un secondo.

Il comando ping continuerà a inviare i pacchetti ICMP all'indirizzo IP di destinazione fino a quando non riceve un interrupt. Per interrompere il comando, basta premere la combinazione di tasti Ctrl+C.

Quando il comando si interrompe, visualizza una statistica che include la percentuale di perdita di pacchetti. La perdita di pacchetti significa che i dati sono stati rilasciati da qualche parte nella rete, indicando un problema all'interno della rete. In caso di perdita di pacchetti, è possibile utilizzare il comando traceroute per identificare dove si verifica la perdita di pacchetti.

Se ping non restituisce una risposta, significa che la comunicazione di rete non è stata stabilita. Quando ciò accade, non significa sempre che l'IP di destinazione non sia attivo. Alcuni host potrebbero avere un firewall che blocca il traffico ICMP o impostato per non rispondere alle richieste di ping.

In caso di successo, il comando ping termina con il codice 0. Altrimenti uscirà con il codice 1 o 2. Ciò può essere utile quando si utilizza l'utility ping in uno script di shell.

Nelle sezioni seguenti, esamineremo le opzioni ping di comando più comunemente utilizzate.

Specificare il numero di pacchetti

Come già accennato, per impostazione predefinita, ping continuerà a inviare pacchetti ICMP fino a quando non riceve un segnale di interruzione. Per specificare il numero di pacchetti di richieste Echo da inviare dopo il quale uscirà il ping, utilizzare l'opzione -c seguita dal numero dei pacchetti:

ping -c 1 DESTINATION

Ad esempio, per eseguire il ping noviello.it solo una volta dovresti usare:

ping -c 1 noviello.it

Specifica l'interfaccia di origine

Il comportamento predefinito del comando ping è di inviare pacchetti ICMP tramite la route predefinita. Se sul tuo computer sono presenti più interfacce, puoi specificare l'interfaccia di origine con l'opzione -I:

ping -I INTERFACE_NAME DESTINATION

Il comando seguente eseguirà il ping noviello.it usando em2 come interfaccia di origine:

ping -I em2 noviello.it

Specifica il protocollo Internet

Quando si esegue il comando ping, utilizzerà IPv4 o IPv6, a seconda delle impostazioni DNS della macchina.

Per forzare ping nell'utilizzare IPv4, passa l'opzione -4 o usa il suo alias ping4:

ping -4 DESTINATION

Per IPv6, passa l'opzione -6 o usa ping6:

ping -6 DESTINATION

Conclusione

ping è un'utility di rete a riga di comando che consente di testare la connettività a livello IP di un determinato host sulla rete.

Per visualizzare tutte le opzioni disponibili del comando ping, digitare:

man ping