Ethernet: Varias máquinas en red - Obijuan/URJC-Gsyc-2018-Arquitectura-Internet GitHub Wiki

Contenido

Introducción

Partimos de un escenario de una red con 4 máquinas. Configuramos sus interfaces de red para que se puedan comunicar, a nivel de Ethernet. Una de las máquinas la usaremos para capturar el tráfico de la red, con tcpdump, y guardarlo en un fichero que luego analizaremos con la herramienta wireshark

Red local de cuatro máquinas

Este es el escenario con el que vamos a trabajar (red-local4.zip) : Una red local formada por cuatro máquinas. Cuando las máquinas están en la misma red local, se dice que son máquinas vecinas, ya que se pueden enviar mensajes directamente entre ellas (comparten el mismo medio físico)

Para enviar mensajes entre ellas necesitamos conocer su direcciones ehternet, o bien enviar mensajes de broadcast (con la dirección destino FF:FF:FF:FF:FF:FF, que les llega a todos)

Para entender el funcionamiento de esta red local haremos lo siguientes con las máquinas

  • PC1 será la encargada de enviar mensajes a la red, usando el programa eth-send.py
  • PC2 estará esperando a recibir las tramas para él, con el programa eth-receive.py
  • PC3 igual que PC2: Esperando a recibir las tramas dirigidas a él, con elprograma eth-receive.py
  • PC4 lo usaremos para escuchar la red, y ver todas las tramas que circulan por ella. Ejecutará el programa eth-sniffer.py

Preparando la red

Los primero que hacemos es arrancar las máquinas para que se nos abran los 4 terminales. En cada máquina activaremos la ethernet con el comando:

ifconfig eth0 up

y nos situaremos en el directorio /hosthome para ejecutar los comandos

cd /hosthome

Así es como estaría la máquina PC4 una vez ejecutados esos comandos

Enviando mensajes

Lanzamos los programas para recibir las tramas como se ha descrito al comienzo del apartado: PC4 escucha todo lo que hay en la red, PC2 y PC3 sólo lo que les llega a ellos

Desde PC1 enviamos los siguientes 5 mensajes, uno a continuación del otro:

pc1:/hosthome# ./eth-send

Este comando envía por defecto el mensaje "Testing--->" a la máquina AA:BB:CC:DD:EE:FF (que no está en est red local). Se ejecuta 2 veces, para enviar dos mensajes iguales.

Ni PC2 ni PC3 reciben nada. Sin embargo, sí lo vemos en PC4, ya que está escuchando todo lo que hay en la red.

Luego enviamos un mensaje para PC2:

pc1:/hosthome# ./eth-send.py DE:d9:b9:Ea:B8:01 "Hola PC2"

Y efectivamente lo recibe PC2. Pero NO PC3. Desde PC4 también lo vemos, aunque el mensaje no es para él.

Enviamos otros mensaje a PC3

pc1:/hosthome# ./eth-send.py CE:17:29:69:4F:25 "Hola PC3"

Ahora lo recibe PC3, pero NO PC2. Desde PC4 también lo vemos

Y finalmente se envía un mensaje de broadcast, a todas las máquinas:

pc1:/hosthome# ./eth-send.py FF:FF:FF:FF:FF:FF "Hola a todos"

Y todos reciben el mensaje

En esta captura se pueden ver los terminales una vez enviados los 5 mensajes:

Y en esta animación se muestra el proceso de cómo ha sucedido:

Analizando tramas ethernet con tcpdump

Vamos a estudiar de forma práctica las tramas ethernet. Para ello vamos a enviar un mensaje de prueba desde PC1 a PC2 y lo visualizaremos desde PC4 usando la herramienta tcpdump

Es similar a lo que hemos hecho con eth-snifer, pero tcpdmp es mucho más potente y nos permite hacer más cosas

En PC4 lanzamos tcpdump para capturar todo lo que hay en la red y mostrarlo en la consola. Lo ejecutamos pasando el parámetro -i y el nombre de la interfaz (eth0 en este ejemplo):

tcpdump -i eth0

El PC4 se queda esperando a que lleguen tramas:

pc4:~# tcpdump -i eth0 
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

Desde PC1 enviamos el mensaje "Hola" a PC2:

pc1:/hosthome# ./eth-send.py 3a:f6:9b:4b:fa:46 "Hola"

En PC2 se recibe correctamente:

pc2:/hosthome# ./eth-receive.py 
Paquetes recibidos en esta maquina
Direccion Ethernet local: 3A:F6:9B:4B:FA:46

Esperando tramas por el interfaz eth0....

-----------------------------------------------------
Desde               bytes   data
6E:4B:68:85:F6:40     46    Hola................

y en la consola de PC4 veremos la trama que ha llegado. Vamos a analizarla

pc4:/hosthome# tcpdump -i eth0
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:16:38.586273 6e:4b:68:85:f6:40 (oui Unknown) > 3a:f6:9b:4b:fa:46 (oui Unknown), ethertype Unknown (0x7a05), length 60: 
        0x0000:  486f 6c61 0000 0000 0000 0000 0000 0000  Hola............
        0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
        0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............

TCPdump nos informa de que ha recibido una trama de 60 bytes (el CRC no cuenta, lo ha consumido el hardware), que justamente es la trama mínima

Se muestra primera la dirección origen: 6e:4b:68:85:f6:40 (6 bytes) y luego la destino (3a:f6:9b:4b:fa:46) y después los 2 bytes del protocolo (0x7a05). Por último se muestra el campo de datos, en hexadecimal en la izquierda y en ASCII a la derecha. El campo de datos tiene los 4 bytes de la cadena Hola y el resto es el relleno

Capturando tramas en un fichero

La herramienta tcpdump nos permite almacenar la información de las tramas capturadas en un fichero, que luego podemos analizar usando wireshark. Vamos a repetir el experimento anterior, pero ahora grabando en un la trama en el fichero ethernet-1.cap

En PC4 ejecutamos el siguiente comando:

pc4:/hosthome# tcpdump -i eth0 -w ethernet-1.cap -s 0

En PC1 volvemos a enviar la trama. Pulsamos control-c en PC para que la captura termine

pc4:/hosthome# tcpdump -i eth0 -w ethernet-1.cap -s 0
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
1 packets captured
1 packets received by filter
0 packets dropped by kernel

Nos indica que ha recibido un paquete. Ahora, desde nuestra máquina Linux vemos que ha aparecido el fichero ethernet-1.cap: Contiene la captura

Analizando la captura con Wireshark

Wireshark es una herramienta que nos permite analizar las tramas almacenadas en un fichero, de una forma muy fácil

Desde el ordenador hacemos doble click en el archivo ethernet-1.cap, y se nos abre wireshark

Hay tres paneles horizontales. En el panel superior vemos las tramas capturadas. Se coloca una línea por cada trama. En nuestro ejemplo, sólo hay una trama (ya que sólo hemos capturado una trama)

En la izquierda vemos el número de trama. La nuestra es la primera: 1. Y es la que se usa como referencia de tiempos, por lo que pone time: 0. A continuación vemos los campos que ya conocemos: dirección destino, dirección origen y tipo de protocolo. En la derecha nos indica el tipo de trama que es: Ethernet. También nos indica su longitud total: 60 bytes. Es la longitud total, incluyendo la cabecera y los datos, pero excluyendo el CRC, que se queda en el nivel físico

El panel inferior contiene la trama cruda al completo. Ahí podemos ver los 60 bytes que componen la trama completa. El primero es 3A y el último 00. Es TODO lo que se ha transmitido por el cable

En la izquierda vemos los valores hexadecimales, y en la derecha los mismos pero en ASCII

El panel central nos da información de los diferentes niveles de la trama. Si pinchamos en el primero, lo que obtenemos es información física: la trama cruda completa. Nos informa de que es una trama de 60 bytes, y en el panel inferior nos resalta todos los bytes que la componen

Si pinchamos en el siguiente nivel, nos informa que se trata de una trama Ethernet y nos da la información de la direción origen, **destino y el protocolo. En el panel inferior se resaltan los 14 bytes de la cabecera Ethernet

Y en el último nivel tenemos los datos: un total de 46. Cuando trabajemos con tramas más complejas, dentro de este campo de datos, a su vez, estará la información de los otros protocolos de nivel superior

Resumen de comandos

Comando Descripción
tcpdump -i eth0 Mostrar en la consola el tráfico que hay en la red cuya interfaz es eth0
tcpdump -i eth0 -s 0 -w fichero.cap Capturar todo el trafico que se ve por la interfaz Eth0 y guardalo en el fichero fichero.cap

Ejercicios para practicar

(TODO)

  • Dos tramas: PC1 -> PC2 y PC2 -> PC1
  • 4 tramas: Pc1 -> Pc2 * 2, PC3 broadcast, PC2 -> PC3 TODO

Autores

Creditos

Licencia

Enlaces