Home / Network & Sniffing / Network & Sniffing / Come funziona Ping
Mattepuffo

Come funziona Ping

Come funziona Ping

Dopo aver spiegato come è possibile scoprire il sistma operativo usato da una macchina in rete usando il comando Ping, ho deciso di spiegare in maniera generale (anche perchè più di così non saprei) come funziona il comando stesso.

Ping è un comando disponibile su tutte le piattaforme e serve per misurare il tempo impiegato tra l’invio di un pacchetto dati e la ricezione della risposta dall’host remoto.

E' usato soprattutto per capire se una macchina è raggiungibile in rete (LAN o Web che sia).

Se non è raggiungibile il comando non ha riposta e la colpa può essere sia del target che del mittente.

Facciamo un esempio di comando lanciato dalla mia macchina con Linux verso il router:

$ ping -c 3 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.569 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.627 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=255 time=0.601 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.569/0.599/0.627/0.023 ms

Il parametro -c 3 serve per inviare solo 3 ping; in Windows potete ometterlo perchè lo fa di default.

Le macchine comunicano e anche abbastanza velocemente (e ci mancherebbe altro visto che è il router attraverso il quale mi collego).

Ma come funziona di preciso?

Ping si basa sul protocollo ICMP (Internet Control Message Protocol), ideato espressamente per servizi di diagnostica.

Il protocollo è formato da 4 campi:

  • Tipo
  • Codice
  • Checksum
  • Dati

A noi interessa il primo.

In totale abbiamo circa una trentina di tipi, e i più "importanti" per noi sono:

  • Tipo 0: Echo reply
  • Tipo 8: Echo request

Quando diamo il comando ping, viene inviato un pacchetto dati ICMP di tipo 8 (Echo request) verso l’Ip specificato.

Se il target è raggiungibile risponde con un paccheto ICMP di tipo 0 (Echo reply).

Se usate uno sniffer tipo Wireshark (programma gratuita e multi-piattaforma) potete vedere le richieste e risposte scartabellando tra le informazioni nella parte inferiore della finestra, alla voce "Internet control Message Protocol".

Da una parte avrò qualcosa come "Type: 8 (Echo (ping) Request)"; dall'altro "Type: 0 (Echo (ping) reply)".