Análisis de tráfico TCP utilizando la herramienta wireshark

Resumen

El presente trabajo trata sobre el uso de la herramienta Wireshark para la captura del flujo de datos transferidos entre un proceso cliente y un proceso servidor haciendo uso de la librería de Sockets (Berkeley Socket API). En dicha captura se utiliza un filtro basado en un número de puerto acordado por ambos procesos, la interfaz que sirve como medio de conexión y el protocolo TCP. Los paquetes capturados por la herramienta se visualizan por capas y cada capa con sus respectivos campos de datos.


Palabras clave:Palabras clave: Protocolo IP, Modelo TCP/IP, Paquete, Puerto, Socket, Wireshark.

Abstract

The present work tries on the use of the tool Wireshark for the capture of the flow of data transferred between a process client and a process servant making use of API Socket. This capture applies a filter for the port for which both processes are identified for the delivery of the data, as much the client as the servant use a protocol guided to connection (TCP), the one strains it is designed for the reliable transmission of data and it is visualized by layers in the packages captured by the tool.


Keywords:IP Protocol, TCP/IP Model, Package, Port, Socket, Wireshark.

Objetivo general

El estudiante será capaz de comprender el proceso de una comunicación en red, basado en el protocolo TCP mediante la captura y el análisis de paquetes con la herramienta Wireshak, desde el momento en que se negocia el establecimiento de la conexión hasta que los datos son transmitidos y la conexión se cierra.

1.- Introducción.

El Protocolo de Control de Transmisión (TCP) es un protocolo orientado a conexión que garantiza la entrega fiable de los datos, está compuesto por cuatro capas (Aplicación, Transporte, Internet y Acceso a la red), en la que cada una se encarga de determinados aspectos en la comunicación y a su vez brindan un servicio específico a la capa superior.

De acuerdo con [2] y [3] cuando dos nodos se comunican mediante TCP, se establece una conexión antes de que estos puedan intercambiar los datos. Al completarse la comunicación, se cierran las sesiones y la conexión finaliza. Los mecanismos de conexión y sesión habilitan la función de confiabilidad del TCP. Para establecer la conexión, los hosts realizan un protocolo de enlace de tres vías en el cual el nodo destino se presenta a la red, verifica que el nodo destino tenga un servicio activo y que este acepte solicitudes en el número de puerto destino y por ultimo informa al nodo destino que el nodo origen intenta establecer una sesión de comunicación en dicho número de puerto.

Los sockets son la interfaz más difundida que hay para la comunicación entre procesos TCP. Un socket es el punto de conexión lógica por el cual dos programas (posiblemente situados en nodos distintos) pueden intercambiarse cualquier flujo de datos, de manera transparente, sin conocer los detalles de cómo se transmiten esos datos, generalmente de manera fiable y ordenada. Por otra parte, Wireshark es un analizador de protocolos open-source diseñado por Gerald Combs y que actualmente está disponible para plataformas Windows y Unix. Conocido originalmente como Ethereal cuyo objetivo principal es el análisis de tráfico además de ser excelente aplicación didáctica para el estudio de las comunicaciones y para la resolución de problemas de red. Implementa una amplia gama de filtros que facilitan la definición de criterios de búsqueda para los más de 1100 protocolos y todo ello por medio de una interfaz.

2.- Desarrollo práctico

En esta sección se describe de manera puntual el proceso llevado a cabo para que el objetivo planteado se lograra, desde requisitos previos a la práctica hasta la obtención de los resultados.

2.1 Requisitos previos a la práctica.

  • Un ordenador con capacidad de 700 MB de memoria RAM o superior, CentOS 6 o superior, arquitectura x86 o x64.
  • Un proceso cliente y otro servidor, desarrollados en lenguaje de programación C utilizando la API Sockets de Berkeley. El código fuente de estos dos procesos quedan disponibles en [1].
  • Conexión entre dos nodos: el cliente y el servidor, con su respectivo puerto y dirección IP, véase Figura 1.
  • Figura 1. Establecimiento de conexión entre cliente y servidor.

    2.2 Proceso de instalación

  • yum install -y wireshark-gnome
  • Comando ejecutado en la terminal de CentOS con los respectivos permisos de super-usuario para la instalación de la herramienta Wireshark, la parte de ‘gnome’ es la interfaz de dicha herramienta. Esta herramienta se encuentra disponible en [4].

    2.3 Selección de filtros en Wireshark.

  • Selección de la interfaz de red a la que queremos capturar el tráfico. Véase Figura 2.
  • Figura 2. Selección de la Interfaz para la captura de paquetes

  • En el apartado del filtrado podemos dejar indicado el protocolo con uno de sus respectivos atributos para mostrar lo datos transferidos a través de este. Figura 3.
  • Figura 3. Selección de filtro para la captura de paquetes

    2.4 Captura de paquetes

    Para comenzar con la captura de tráfico de datos, ejecutamos el proceso socket del nodo origen servidor (Figura 4) por medio del comando (./servidor, es el nombre que se le ha dado al proceso).

    Figura 4. Ejecución del proceso servidor.

    Así mismo también desde la terminal de CentOS usando el comando sudo wireshark abrimos la herramienta Wireshark. Desde la interfaz seleccionamos la red a la cual le capturaremos el tráfico, así como también aplicamos un filtro e iniciamos Wireshark presionando Start.

    Iniciamos el proceso socket cliente (Figura 5) en el nodo destino por medio del comando (./cliente, cliente es el nombre que se le ha dado al proceso), el nodo origen empieza a enviar los datos y el nodo destino empieza a recibirlos.

    Figura 5. Ejecución del proceso cliente.

    Cada vez que el proceso socket cliente es ejecutado, se inicia la negociación de tres vías entre el nodo origen y el nodo destino, hecho esto la herramienta Wireshark se encarga de capturar la negociación, el envío de datos y el cierre de la negociación (Figura 6).

    Figura 6. Captura de paquetes TCP, especificando las capas del Protocolo.

    2.5 Análisis de paquetes

    En la Figura 7, puede observarse la información de los paquetes capturados durante el envío del nodo origen al nodo destino.

    En la primera columna tenemos el número de frames capturados, en el frame número 1 se hace la negociación de la conexión entre el cliente y el servidor, en el cual el cliente manda una petición o solicitud de conexión, en el frame número 2 es donde el servidor ya acepta la conexión con el cliente, en el frame número 3 el cliente manda un mensaje al servidor que la conexión ha sido aceptada y a partir del frame número 4 el servidor empieza a enviar los paquetes de datos al cliente hasta llegar a su fin.

    En la Segunda columna (time) se puede observar el tiempo que duró la transmisión, en la primera fila está en ceros puesto que no está enviando ningún paquete solo está en la negociación de la conexión, a partir de la segunda fila ya empieza el conteo del tiempo puesto que el servidor manda un mensaje al cliente diciendo que su conexión ha sido aceptada.

    La tercera columna (source) nos indica las direcciones IP en el cual nos dice quien ha sido el que envía una petición o mensaje.

    La cuarta columna (destination) corresponde a la dirección de a quién va dirigido la petición. La quinta columna (protocol) nos revela el tipo de protocolo de transporte que estamos utilizando para el tráfico de paquetes, en este caso estamos utilizando el Protocolo de Control de Transmisión (TCP) del modelo TCP/IP.

    En la sexta columna (length) nos muestra el tamaño de envío en Bytes. En la séptima y última columna (info) se aprecia más información sobre el paquete.

    Figura 7. Tráfico de paquetes capturados desde el inicio al cierre de la conexión.

    En la Figura 8 se muestra el cómo se establece la conexión sucede a nivel de red entre el cliente y el servidor. En la negociación de tres vías el cliente con la dirección 192.168.1.2 le envía un segmento de sincronización (SYN) que contiene un identificador numérico al servidor (192.168.1.1). Al recibir esta información, el servidor tiene constancia de la intención de iniciar una comunicación por parte del cliente, además, gracias al identificador numérico recibido, conoce el punto exacto en el que el cliente señala el inicio de su transmisión de datos.

    Figura 8. Negociación de la conexión a 3 vías (three-way handshake).

    En la Figura 9 se muestra como termina una conexión TCP mediante cuatro vias. El servidor con la direccion de 192.168.1.1 envia un segmento FIN (no hay mas datos del emisor) al cliente 192.168.1.2, al recibir dicha informacion el cliente envia la respuesta de reconocimiento ACK al cliente. En la otra vuelta, ahora el cliente es quien envía dicho segmento FIN (no hay mas datos del emisor) al servidor y en la ultima via el servidor es la que envia la respuesta ACK al cliente y con eso concluye la finalizacion de la negociacion.

    Figura 9. Finalización de la conexión cliente-servidor.

    Cada vez que seleccionemos un frame, en la parte inferior nos mostrara información de lo que sucede en cada posición de acuerdo al protocolo TCP.

    En la Figura 10, nos desglosa la información del frame seleccionado, en este caso en frame número 4 es aquél que se encuentra en la tercera columna de envío, cuyos campos se describen en seguida:

    WTAP_ENCAP: 1 Se refiere al tipo de encapsulamiento, el 1 se refiere al Ethernet.

    ARRIVAL TIME: nos muestra la fecha y tiempo de la captura.

    FRAME LENGTH: nos muestra el tamaño de Bytes y a su lado el tamaño en bits, así mismo en la parte de abajo en Capture Length.

    FRAME IS MARKED: nos manda un valor booleano (False), el cual significa que el usuario no ha marcado el marco, ósea trama.

    FRAME IS IGNORED: de igual manera nos manda un booleano en el cual nos indica los paquetes han sido ignorados por lo tanto no han sido almacenados en el archivo de captura.

    PROTOCOLS IN FRAME: De arriba hacia abajo, se indican las capas del modelo TCP: Acceso a la red, Internet y Transporte. Observando que en este mismo orden se encuentran las direcciones MAC, las direcciones IP y el número de puerto, tanto para el host origen como para el host destino.

    Figura 10. Información del Frame capturado.

    En la Figura 11, nos brinda información como el Origen (Src) donde nos muestra la dirección MAC, y nos indica el Destino (Dst) con su dirección MAC. (Una dirección MAC no puede ser repetida en este caso se está trabajando con una máquina virtual clonada por lo que conlleva a que tenga la misma dirección MAC.), desglosamos la información que contiene, el campo Destination nos muestra la dirección MAC del servidor así mismo en la parte de abajo muestra otra dirección (address) que es la del cliente, como lo acabamos de mencionar no puede haber una dirección MAC igual puesto que esto conllevaría a conflictos en los envíos de paquetes si hubiese sido de manera física la dirección MAC cambiaria. Así mismo nos muestra la dirección MAC del Origen (Source), como podemos observar en la Figura 21 nos muestra 4 bits desactivados 0, cuya dirección es UNICAST el cual es el envío de información desde un único emisor a un único receptor.

    Figura 11. Información de la capa Ethernet (Acceso a la red).

    En la Figura 12, nos muestra las direcciones IP origen y la dirección IP destino.

    VERSIÓN: Indica la versión del protocolo, en este caso se trata de IPv4.

    HEADER LENGTH: Indica el tamaño de la cabecera.

    TOTAL LENGTH: Muestra el tamaño total.

    REVCERVED BIT: “Not set” significa que no se han reservado los bits.

    DON’T FRAGMENT: “Set” indica que está activado y que no se fragmentó el conjunto de datos.

    MORE FRAGMENTS: “Not set” significa que no hay más fragmentos, por lo tanto no está activado.

    TIME TO LIVE (TTL): esto indica el tiempo de vida de cada paquete, en este caso su tiempo de vida fue de 64, su tiempo de vida no se mide con tiempo sino por saltos, lo que quiere decir que por cada router que pasa su tiempo de vida va disminuyendo, en caso que su tiempo de vida se acabe y no llegue a su destino esto el paquete se pierde totalmente.

    PROTOCOL: TCP Nos indica el tipo de protocolo que se está utilizando

    HEADER CHECKSUM: Si el envío concluyó correctamente este campo será igual a True, en otro caso False.

    Figura 12. Información del Protocolo IP (Capa de internet).

    En la Figura 13 nos proporciona información acerca del número del puerto en este caso estamos utilizando el puerto 7000 para el Origen de envío, y el puerto 36638 para el destino, cuyos campos quedan descritos a continuación.

    SOURCE PORT: afs3-fileserver (7000) nos está indicando que el servidor tiene el puerto 7000.

    DESTINATION PORT: 36638 (36638) nos indica el puerto del cliente por el cual tendremos comunicación para hacer la transferencia de datos, ósea, en que puerto pasaran los datos.

    HEADER LENGTH: 32 bytes, esta parte nos indica el tamaño de la cabecera de datos.

    PUSH: “set” nos está indicando que el conjunto de empuje se activó.

    WINDOWS SIZE VALUE: 227 es el valor del tamaño de la ventana.

    CALCULATED WINDOW SIZE: 14528 Calcula el tamaño de la ventana.

    CHECKSUM: 0x877b es el código de verificación para el control de errores.

    TIMESTAMP: Marca de tiempo, tipo, tamaño, valor de la marca de tiempo.

    NO. OPERATION: Operaciones como lo son copia en el fragmento, control de clases, numero de la operación.

    TCP SEGMENT DATA: Nos está indicando el tamaño del segmento enviado, que en este caso es de 256.

    Figura 13. Información del Protocolo TCP (Capa de transporte).

    3.- Resultados obtenidos

    Tanto en el establecimiento de la conexión como en el proceso de envió entre los procesos servidor y cliente fue exitoso, gracias al protocolo TCP, ya que como se mencionó es un protocolo orientado a conexión, lo cual se refiere a que si se llega perder o dañar un paquete este se encargará de retransmitirlo.

    4.- Conclusión

    Dada la información previamente analizada, se adquiere una noción más detallada de la utilización de la herramienta Wireshark, como un recurso para el análisis del tráfico de paquetes entre dos hosts conectados mediante el protocolo TCP, siendo este el protocolo que permite una conexión fiable.

    Conforme a los resultados obtenidos a través de la práctica se ha logrado comprender el significado que adquiere cada uno de los campos que componen a las capas de Acceso, Red y Transporte, enfatizando nuestro interés en esta última.

    Referencias

    [1]Guerrero, Alain Ezau (Código fuente cliente-servidor). Recuperado el 25 de marzo de 2017 desde https://www.dropbox.com/sh/si868j2ujautqhm/AAAbVHshsy59vFEMVuHhUOB9a?dl=0

    [2]Hernández, Gonzalo. (Protocolo de control de transferencia enero 2014). Recuperado el 22 de marzo de 2017 desde https://www.uaeh.edu.mx/scige/boletin/huejutla/n3/r1.html

    [3]Lizarraga, Hyassinni Margarita (Curso de CCNA1), recuperado el 13 de marzo de 2017 desde https://sites.google.com/site/cursoenlineaccna1/unidad-2-capa-de-transporte-del-modelo-osi/2-2-protocolo-tcp-comunicacion-con-confiabilidad/2-2-3-establecimiento-y-finalizacion-de-la-conexion-tcp

    [4]Wireshark Tool. (s.f.). Recuperado el 15 de marzo de 2017 desde https://www.wireshark.org/download.html

    [a]Alumno de la Licenciatura en Ciencias Computacionales

    [b]Profesor por asignatura de la Universidad Autónoma del Estado de Hidalgo


    Compartir en: