Esempi pratici del comando Ping in Linux

Un’indispensabile strumento per l’amministrazione di rete è il comando Ping in Linux. Potresti aver già usato ping prima per la risoluzione dei problemi di base, ma cosa fa esattamente questo comando?

Il comando ping invia richieste del Protocollo di Controllo di Internet (ICMP) a host remoti o locali e attende una risposta. L’assenza di risposta potrebbe indicare un problema con la connessione o gli stessi host.

Continua a leggere ed esplora i modi pratici di utilizzare il comando ping in Linux!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri seguirla, assicurati di avere un computer Linux con una connessione internet. Questo tutorial utilizza un computer Ubuntu 20.04.

Inoltre, assicurati di aver già aperto una sessione terminale sul tuo computer Linux.

Verifica della connettività della rete locale

Immagina di stai sviluppando un’applicazione web. Il test fallisce quando provi ad accedere all’applicazione tramite l’indirizzo di loopback dell’host (127.0.0.1). Prima di strapparti i capelli risolvendo i problemi dell’applicazione, assicurati che il protocollo TCP/IP funzioni internamente usando il comando ping.

Gli indirizzi di loopback predefiniti sono 127.0.0.1 e 0:0:0:0:0:0:0:1 (o ::1) rispettivamente per IPv4 e IPv6.

Per verificare la connettività dell’indirizzo di loopback, esegui il seguente comando ping seguito dall’indirizzo di loopback nel terminale. Questo comando dimostra l’uso più basilare del comando ping in Linux.

ping 127.0.0.1

E se il loopback funziona correttamente, dovresti vedere un output simile alla schermata sottostante.

Pinging the loopback address (127.0.0.1)

In alternativa, pingare l’hostname localhost dovrebbe dare lo stesso risultato perché si risolve per impostazione predefinita all’indirizzo di loopback.

Pinging the loopback address (localhost)

Per interrompere il comando ping, premi CTRL+C nel terminale. In caso contrario, il comando ping verrà eseguito continuamente.

Nota: Non premere CTRL+Z per interrompere il comando ping. Farlo fermerà il comando, ma il processo rimarrà in esecuzione in background.

Terminating the ping command in Linux

Comprensione dell’output del comando Ping su Linux

Prima di andare avanti, beneficeresti dalla comprensione esplicita dell’output invece di interpretarlo solo come “funziona”. Fai riferimento all’immagine sottostante e alla scomposizione dei valori che segue.

Ping command output
  • A (bytes) – Shows the ICMP echo request (packet) size in bytes.
  • B (from) – Shows the target host’s IP address from where the ping command receives the response.
  • C (icmp_seq) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value shows icmp_seq=N, where N is the order number.
  • D (TTL) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255.
  • E (time) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that the time values are less than 0.1 milliseconds in this example since the target is the same machine. The time value increases naturally when the ping destinations are remote or have an internet address.
  • F (statistics) – Shows the summary and statistics of the ping command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.

Forzare la versione del protocollo Internet

Il comando ping utilizza l’IPv4 per impostazione predefinita. Ma cosa succede se stai testando la compatibilità della tua applicazione con l’IPv6? Per forzare il comando ping a utilizzare l’IPv6, devi specificare l’opzione -6 nel tuo comando ping in Linux, come puoi vedere nel codice qui sotto.

ping -6 localhost

Come puoi vedere di seguito, la risposta mostra che è arrivata dall’indirizzo di loopback IPv6 (::1).

Pinging the IPv6 loopback address

Al posto dell’opzione -6, l’opzione -4 forza ping a utilizzare IPv4. Ma poiché ping predefinisce l’IPv4, di solito non è necessario specificare l’opzione -4.

Limitare il numero di risposte

Negli esempi precedenti, dovevi premere CTRL+C per interrompere il comando ping perché altrimenti avrebbe continuato a eseguirsi in modo continuo.

L’opzione -c ti consente di specificare il numero di risposte che il comando ping riceve prima di interrompersi. Perché usare questa opzione? In alcuni casi, potresti voler testare come il tuo sistema risponde a 10, 100, 1000 pacchetti ICMP, e così via.

Esegui il seguente comando per inviare cinque pacchetti ICMP all’host di destinazione. Sostituisci 5 con il numero di risposte ICMP da ricevere prima di fermarti.

ping -c 5 localhost

Come puoi vedere di seguito, il comando ping si è interrotto dopo la quinta richiesta (icmd_seq=5), e non è stato necessario premere CTRL+C per interromperlo.

Ping with a limited request count

Regolazione dell’intervallo di richiesta

Supponiamo che tu voglia testare la connessione di rete tra due dispositivi, e uno di essi ha una banda bassa. In questo caso, puoi aumentare l’intervallo tra ogni richiesta in modo che il secondo dispositivo abbia abbastanza tempo per elaborare il pacchetto ICMP corrente.

Il comando ping invia la richiesta ICMP successiva un secondo dopo aver completato quella precedente per impostazione predefinita. Per regolare il ritardo, è necessario specificare l’opzione -i seguita dal valore di ritardo in secondi.

Ad esempio, eseguire il seguente comando ping per inviare cinque richieste ICMP con un intervallo di due secondi tra le richieste.

ping -c 5 -i 2 localhost

Un altro esempio, eseguire il seguente comando ping per inviare cinque richieste ICMP con un intervallo di mezzo secondo tra ciascuna richiesta.

ping -c 5 -i 0.5 localhost

Confrontando i risultati di entrambi i comandi con intervalli diversi si mostra la differenza tra i valori totali di tempo.

Comparing ping results with different intervals

Simulazione di un Attacco di Flood

A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.

Puoi simulare un attacco di flood per testare come il tuo sistema risponde a un attacco. Non preoccuparti, però. La simulazione di ping flood è controllata e puoi fermarla in qualsiasi momento premendo CTRL+C.

Esegui il seguente comando sul tuo computer locale per vedere quante richieste il tuo dispositivo può gestire al secondo. L’opzione -f significa inviare rapidamente diversi pacchetti ping senza alcun limite arbitrario.

Sostituisci localhost con l’indirizzo IP o il nome host dell’app che desideri testare. Questo esempio simula il ping flood solo sull’host locale. Lascia che il comando ping funzioni per circa cinque secondi, quindi premi CTRL+C per terminarlo.

Il comando ping -f richiede di essere utente root o di avere privilegi sudo.

ping -f localhost

Come puoi vedere qui sotto, il comando ping è riuscito a inviare e ricevere 124,685 pacchetti ICMP entro 4276 millisecondi senza perdita di pacchetti. Piuttosto buono, eh? Ma, in un caso d’uso reale, vedrai qualche perdita di pacchetti. La perdita di pacchetti è inevitabile perché la rete non è perfetta.

Simulating a ping flood attack

Verifica della connettività Internet

Tutti usano Internet in qualche modo, giusto? Supponi di provare a caricare un sito web utilizzando il tuo browser, ma il tempo di caricamento della pagina sembra lento. Il sintomo indicherebbe che la risoluzione DNS funziona, ma qualcosa influisce sulla velocità della rete.

Diagnosticare il problema senza strumenti di terze parti includerebbe il comando ping. L’uso del comando è lo stesso quando si testa la connettività della rete locale. Ma invece di mirare all’indirizzo loopback, specificheresti un IP pubblico o un indirizzo web.

Esegui il seguente comando per pingare un sito web pubblico esterno. Sostituisci adamtheautomator.com con un altro indirizzo web a tua scelta.

ping -c 5 adamtheautomator.com

Subito noterai che il valore del tempo è relativamente più alto rispetto al ping del localhost. Questo aumento del tempo trascorso è dovuto al fatto che l’indirizzo di destinazione adamtheautomator.com non è nello stesso host e nemmeno nella stessa rete.

Nei passaggi precedenti, il tuo comando ping è riuscito, ma nell’uso del mondo reale, ci sono momenti in cui il comando ping fallirà per molti motivi possibili.

Ecco alcuni errori comuni e come risolverli.

  • Host di destinazione non raggiungibile – Questo errore significa che non c’è una route per il host di destinazione. Questo errore può verificarsi se il host o il dominio sono giù.
  • Richiesta scaduta – Questo errore significa che la richiesta al host di destinazione ha impiegato troppo tempo (oltre 4 secondi o 4000 millisecondi), e la connessione è scaduta. Questo errore può verificarsi se il host di destinazione è troppo occupato per rispondere, un firewall blocca la connessione, o hardware di rete difettoso (cavo, router, ecc.).
  • Host sconosciuto – Questo errore significa che il DNS non può risolvere il nome host in un indirizzo IP. Controlla di aver inserito correttamente il nome host. Se sospetti che il tuo router potrebbe non funzionare correttamente, prova a riavviare il router.
  • TTL Scaduto in transito – Questo errore significa che la richiesta ICMP è scaduta prima di raggiungere la destinazione. Il pacchetto ping si riduce a zero (0) prima di raggiungere il host di destinazione. Nella maggior parte dei casi, una errata configurazione nella tabella di routing può causare questo errore. Considera di controllare la tua tabella di routing per vedere se c’è un problema.

Nel caso non lo sapessi: i giocatori si riferiscono al ping come la loro connessione al server di gioco nella comunità dei videogiochi. Un ping basso significa una connessione più reattiva, specialmente nei giochi frenetici. Un ping alto indica una connessione meno reattiva e può rendere il gioco lento.

Alcuni Internet Service Provider (ISP) restituiscono una pagina di ricerca invece di un messaggio di errore quando si tenta di connettersi a un sito web che non esiste. Potresti ottenere un risultato falso positivo perché stai ricevendo una risposta invece di un errore.

Salvataggio dell’output di Ping su un File

La maggior parte dei comandi, se non tutti, restituisce i risultati solo sullo schermo, e il comando ping in Linux non fa eccezione. Il terminale Linux ha operatori di reindirizzamento dell’output integrati che consentono di reindirizzare l’output su un file.

Questi operatori di reindirizzamento sono i seguenti:

il carattere (>), che sovrascriverà il contenuto del file, e il;

il carattere (>>), che aggiungerà l’output al contenuto esistente.

Ma perché vorresti salvare i risultati del ping su un file? Principalmente per la registrazione e successiva analisi utilizzando un editor di testo o un analizzatore di registri.

Puoi anche utilizzare un programma di fogli di calcolo per creare un grafico che mostra come cambia nel tempo il tempo di ping.

Esegui il seguente comando per salvare l’output del ping su un file. Questo comando scrive tutto l’output standard del comando ping su un file chiamato log.txt sul disco.

ping -c 10 localhost > log.txt

Mentre il comando ping è in esecuzione, noterai che non c’è output sullo schermo.

Ora, apri il file log.txt in un editor di testo, come nano. O visualizza il contenuto del file eseguendo il comando cat.

# Apri in un editor di testo
nano log.txt
# O
# Mostra i contenuti sullo schermo
cat log.txt
Opening the ping output file in a text editor
Displaying the ping output file contents on the screen

Conclusione

In questo tutorial, hai imparato come utilizzare il comando ping di Linux con vari esempi pratici. Hai anche imparato come salvare l’output del ping su un file su disco in modo da poterlo analizzare in seguito.

A questo punto, dovresti avere una buona comprensione di come funziona il comando ping e di come possa essere utile. Ma prima di andare avanti e iniziare a pingare tutto ciò che vedi, ci sono alcune regole che devi abilitare nei tuoi gruppi di sicurezza per consentire il traffico ICMP.

Grazie per aver letto e buono studio!

Source:
https://adamtheautomator.com/ping-command-in-linux/