IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Protocol ICMP

Introducció

Internet Control Message Protocol. Aquest va juntament amb el protocol IP. És un dels protocols core d'Internet (aka Internet Protocol Suite). És utilitzat pels sistemes operatius dels nodes d'una xarxa per enviar missatges d'error de comunicació entre nodes com per exemple que un node no està accessible o un servei no està disponible. Es un sistema de missatges. S'utilitza amb comandes bàsiques de xarxa, normalment amb la comanda ping. Altres aplicacons com traceroute depenen en gran manera d'aquest protocol.

El número de protocol és el 1

Cal tenir en compte que a diferència de TCP o UDP no s'utilitza per enviar dades entre sistemes.

Cal tenir en compte que hi ha dos versions:

  • ICMPv4: ICMP per al protocol IP versió 4
  • ICMPv6: ICMP per al protocol IP versió 6

Es col·locaria al nivell o capa 4 . Aquest protocol s'ha de moure per tota la xarxa. No necessita UDP o TCP per desplaçar-se.

Capçalera

Té una mida de 8 bytes (64 bits). ICMP és un protocol que corre sobre el protocol IP i no utilitza ni TCP ni UDP. Tots els paquets ICMP tenen una capçalera de mida de 8 bytes (64 bits) i una mida de les dades (payload) variable

Icmp.png

  • Primer byte: indica el ICMP type. Es poden fer 256 paquets diferents (2⁸).
  • Segon byte: indica el ICMP code
  • Tercer i quart bytes: són el checksum tel missatge icmp sencer (ICMP message). El algorisme s'especifica al RFC 1071.
  • Resta de bytes: depenen dels tipus i el codi ICMP

Conceptes

ICMP Type: indica el tipus de missatge. Consulteu ICMP#Tipus_de_missatges ICMP Code: indica el subtipus de paquet ICMP ICMP Message: és el paquet sencer, incloent la capçalera i les dades

Echo Reply i Echo Request

Aquests paquets miren l'estat de la màquina. És el primer tipus de paquets.

Per comprovar utilitzem el ping.

$ ping 8.8.8.8

Amb l'eina WireShark capturem els paquets per comprovar l'Echo Reply i l'Echo Request. Per evitar que se'ns mostren tots els paquets, es filtren pel protocol ICMP.

Echo Request. Paquet d'enviament.

Icmp2.png

Echo Reply. Paquet de rebuda.

Icmp3.png

Destination unreacheable

Aquest es quan un paquet no pot arribar al seu destí. El paquet s'envia però no hi ha resposta. La resposta pot ser de dos maneres.

Al 8.8.8.7 el paquet s'ha enviat però per a la resposta algú s'ha menjat el paquet de resposta pel camí. Ho provem pel terminal amb la comanda

$ ping 8.8.8.7

Amb l'eina WireShark els paquets són els següents. Segons la taula el codi que ens retorna és el 0 Network unreachable error.

Icmp4.png


AL 192.168.203.45, fent aquest ping a l'aula del costat. El missatge que ens retorna ens diu el propi gateway (router) que aquesta direcció no existeix.

$ ping 192.168.203.45

Aquesta comanda ens retorna

PING 192.168.203.45 (192.168.203.45) 56(84) bytes of data.
From 192.168.203.1 icmp_seq=1 Destination Host Unreachable
From 192.168.203.1 icmp_seq=2 Destination Host Unreachable
From 192.168.203.1 icmp_seq=3 Destination Host Unreachable
From 192.168.203.1 icmp_seq=4 Destination Host Unreachable
From 192.168.203.1 icmp_seq=5 Destination Host Unreachable
From 192.168.203.1 icmp_seq=6 Destination Host Unreachable
From 192.168.203.1 icmp_seq=7 Destination Host Unreachable
From 192.168.203.1 icmp_seq=8 Destination Host Unreachable
From 192.168.203.1 icmp_seq=9 Destination Host Unreachable
From 192.168.203.1 icmp_seq=10 Destination Host Unreachable
From 192.168.203.1 icmp_seq=11 Destination Host Unreachable
From 192.168.203.1 icmp_seq=12 Destination Host Unreachable
^C
--- 192.168.203.45 ping statistics ---
14 packets transmitted, 0 received, +12 errors, 100% packet loss, time 13042ms
pipe 3

Amb l'eina WireShark capturem els paquets que s'envien. El paquet que s'envia ens retorna el codi 0 Network unreachable error.

Icmp5.png

El paquet de resposta ens retorna el codi 1 Host unreachable error.

Icmp6.png

Time exceeded

Aquest es quant el paquet mort perquè s'ha excedit el temps que a circulat. No es mesura amb segons, es mesura amb els salts que fa de router en router.

icmp-time-exceeded

IP Tables

Provar aquesta comanda

$ sudo iptables -A OUTPUT -d 8.8.8.8 -j REJECT --reject-with icmp-net-unreachable
From 192.168.202.160 icmp_seq=1 Destination Net Unreachable
From 192.168.202.160 icmp_seq=1 Destination Net Unreachable
From 192.168.202.160 icmp_seq=1 Destination Net Unreachable
^CFrom 192.168.202.160 icmp_seq=1 Destination Net Unreachable

--- 8.8.8.8 ping statistics ---
0 packets transmitted, 0 received, +133308 errors


$ sudo iptables -A INPUT -d 8.8.8.8 -j REJECT --reject-with icmp-host-unreachable
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 8999ms

Iptables1.png


Nota: es poden esborrar totes les regles amb

$ sudo iptables -nL --line-number

Després es tria la línia que es vol esborrar amb:

$ iptables -D OUTPUT 7
$ iptables -D INPUT 7

Iptables2.png

Iptables3.png

$ sudo iptables -A INPUT -d 8.8.8.8 -j REJECT --reject-with icmp-port-unreachable
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
12 packets transmitted, 0 received, 100% packet loss, time 10999ms

Iptables4.png

Iptables5.png

$ sudo iptables -A OUTPUT -d 192.168.202.238 -j REJECT --reject-with icmp-port-unreachable

Iptables6.png


$ sudo iptables -A OUTPUT -d 192.168.202.238 -j REJECT --reject-with icmp-net-prohibited
From 192.168.202.160 icmp_seq=1 Destination Net Prohibited
From 192.168.202.160 icmp_seq=1 Destination Net Prohibited
From 192.168.202.160 icmp_seq=1 Destination Net Prohibited
From 192.168.202.160 icmp_seq=1 Destination Net Prohibited
From 192.168.202.160 icmp_seq=1 Destination Net Prohibited^C

--- 192.168.202.238 ping statistics ---
0 packets transmitted, 0 received, +61120 errors

Iptables7.png

Iptables8.png


$ sudo iptables -A OUTPUT -d 192.168.202.238 -j REJECT --reject-with icmp-host-prohibited
From 192.168.202.160 icmp_seq=1 Destination Host Prohibited
From 192.168.202.160 icmp_seq=1 Destination Host Prohibited
From 192.168.202.160 icmp_seq=1 Destination Host Prohibited
From 192.168.202.160 icmp_seq=1 Destination Host Prohibited
^CFrom 192.168.202.160 icmp_seq=1 Destination Host Prohibited

--- 192.168.202.238 ping statistics ---
0 packets transmitted, 0 received, +82813 errors

Iptables9.png


$ sudo iptables -A OUTPUT -d 192.168.202.238 -j REJECT --reject-with icmp-admin-prohibited
From 192.168.202.160 icmp_seq=1 Packet filtered
From 192.168.202.160 icmp_seq=1 Packet filtered
From 192.168.202.160 icmp_seq=1 Packet filtered
From 192.168.202.160 icmp_seq=1 Packet filtered
From 192.168.202.160 icmp_seq=1 Packet filtered
^C
--- 192.168.202.238 ping statistics ---
0 packets transmitted, 0 received, +241450 errors

Iptables10.png

Vegeu també iptables

Ping com a traceroute

$ ping -nR www.iesebre.com
PING www.iesebre.com (192.168.50.80) 56(124) bytes of data.
64 bytes from 192.168.50.80: icmp_seq=1 ttl=63 time=0.827 ms
RR: 	192.168.50.80
	192.168.50.80
	192.168.50.80
	192.168.50.80
	192.168.50.80
	192.168.50.80

64 bytes from 192.168.50.80: icmp_seq=2 ttl=63 time=0.861 ms	(same route)
64 bytes from 192.168.50.80: icmp_seq=3 ttl=63 time=0.772 ms	(same route)

Aquesta ens informa de que el time to life a caducat. Retorna aquesta resposta perquè com sols té un temps de 1 no pot arribar al servidor de Google, se'n necessiten 8 per arribar-hi. $ ping -t 1 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.202.1 icmp_seq=1 Time to live exceeded
From 192.168.202.1 icmp_seq=2 Time to live exceeded
From 192.168.202.1 icmp_seq=3 Time to live exceeded

El paquet d'enviament

Ping1.png

El paquet de resposta

Ping2.png

Si es prova amb valor 7

$ ping -t 7 8.8.8.8

El resultat és el mateix

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 216.239.48.105 icmp_seq=1 Time to live exceeded
From 216.239.48.105 icmp_seq=2 Time to live exceeded
From 216.239.48.105 icmp_seq=3 Time to live exceeded
From 216.239.48.105 icmp_seq=4 Time to live exceeded
From 216.239.48.105 icmp_seq=5 Time to live exceeded
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 4006ms

Si ens fem un ping a nosaltres mateixos, es fa un ping cada segon.

$ ping localhost
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.022 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.058 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.058 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.054 ms
^C
--- localhost ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.022/0.048/0.058/0.014 ms

Amb el paràmetre -i podem indicar el temps amb segons.

$ ping -i 0.5 localhost

Per veure si hi ha molt de tràfic de la xarxa, es pot utlitzar una eina per monitoritzar. Monitor xarxa.png

Combinant aquesta opció amb la de enviar els paquets més grans, es pot augmentar el tràfic de la xarxa.

$ ping -i 0.5 -s 52000 localhost

Envia paquets a la màxima velocitat.

$ sudo ping -f 8.8.8.8

També ho podem fer al localhost que encara s'enviaran els paquets més ràpids

$ sudo ping -f localhost

Per veure tots els paquets que s'estan enviat

sudo tcpdump -i eth0
21:48:04.803561 IP manel.local > 192.168.202.255: ICMP echo request, id 9964, seq 24558, length 1458
21:48:04.804796 IP manel.local > 192.168.202.255: ICMP echo request, id 9964, seq 24560, length 1458
21:48:04.806038 IP manel.local > 192.168.202.255: ICMP echo request, id 9964, seq 24561, length 1458
21:48:04.807277 IP manel.local > 192.168.202.255: ICMP echo request, id 9964, seq 24563, length 1458
21:48:04.808314 IP manel.local > 192.168.202.255: ICMP echo request, id 9964, seq 24565, length 1458
21:48:04.809338 IP manel.local > 192.168.202.255: ICMP echo request, id 9964, seq 24567, length 1458