• No se han encontrado resultados

Editor didáctico de tramas IP

N/A
N/A
Protected

Academic year: 2020

Share "Editor didáctico de tramas IP"

Copied!
69
0
0

Texto completo

(1)EDITOR DIDACTICO DE TRAMAS IP. CARLOS IVAN POVEDA RODRIGUEZ. UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE INGENIERIA DE SISTEMAS BOGOTA D.C. 2004. EDITOR DIDACTICO DE TRAMAS IP.

(2) CARLOS IVAN POVEDA RODRIGUEZ. Monografía para optar al titulo de Ingeniero de sistemas. Director HAROLD CRUZ inegeniero electronico. UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE INGENIERIA DE SISTEMAS BOGOTA D.C. 2004.

(3) A mis padres por Todo el apoyo durante la carrera..

(4) AGRADECIMIENTOS. El autor expresa sus agradecimientos: Harold Cruz Ingeniero electrónico. Isaias Poveda Ingeniero electrónico por su valiosa orientación. Milton Quiroga Ingeniero de Sistemas..

(5) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. CONTENIDO CONTENIDO......................................................................................................................... 5 INTRODUCCIÓN.................................................................................................................. 8 1. DEFINICIÓN DEL PROBLEMA.................................................................................. 9. 2. MARCO TEÓRICO ..................................................................................................... 10 2.1. ETHERNET 2 ...................................................................................................... 10. 2.2. PROTOCOLOS DE CAPA 3 ............................................................................... 11. IP (Internet Protocol) .................................................................................................... 11 2.2.1. Longitud de la Cabecera. .............................................................................. 12. 2.2.2. Versión. ........................................................................................................ 13. 2.2.3. Tipo de servicio. ........................................................................................... 13. 2.2.4. Longitud Total. ............................................................................................. 13. 2.2.5. Identificación. ............................................................................................... 13. 2.2.6. Fragment Offset............................................................................................ 14. 2.2.7. Flags ............................................................................................................. 14. 2.2.8. Time to live (TTL)........................................................................................ 14. 2.2.9. Protocolo....................................................................................................... 14. 2.2.10. Checksum ..................................................................................................... 14. 2.2.11. Dirección IP fuente....................................................................................... 15. 2.2.12. Dirección IP de destino................................................................................. 15. 2.2.13. Opciones y relleno ........................................................................................ 15. 2.3. PROTOCOLOS DE CAPA 4 ............................................................................... 16. 2.3.1. UDP (User Datagram Protocol).................................................................... 16. 2.3.2. TCP (Transmission Control Protocol).......................................................... 17. 2.4. Herramientas de Captura de paquetes (sniffers)................................................... 18. 2.4.1. Ethereal......................................................................................................... 19. 2.4.2. TcpDump y WinDump ................................................................................. 22. 2.4.3. JpcapDumper ................................................................................................ 22. Por: Carlos Iván Poveda R.. Página 5 de 65.

(6) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Herramientas de inyección de paquetes................................................................ 23. 2.5. 3. 2.5.1. Hping2 .......................................................................................................... 24. 2.5.2. Nemesis ........................................................................................................ 26. 2.6. Librerías para captura de paquetes ....................................................................... 27. 2.7. Librerías para inyección de paquetes.................................................................... 37. 2.8. Otras librerias ....................................................................................................... 39. EJEMPLO DE DISCRIMINACIÓN DE CAMPOS EN TRAMAS Y. DATAGRAMAS DE CAPAS 2,3 Y 4................................................................................. 41 3.1. 4. SOLICITUD DE CONEXIÓN............................................................................. 41. 3.1.1. ANÁLISIS EN CAPA 2 (ETHERNET)....................................................... 41. 3.1.2. ANÁLISIS EN CAPA 3 (IP)........................................................................ 42. 3.1.3. ANÁLISIS EN CAPA 4 (TCP) .................................................................... 46. 3.2. ACEPTACIÓN DE CONEXIÓN......................................................................... 49. 3.3. TRANSFERENCIA DE INFORMACIÓN .......................................................... 51. ANÁLISIS DE REQUERIMIENTOS ......................................................................... 54 Casos funcionales: ............................................................................................................ 54. 5. ARQUITECTURA DE LA SOLUCIÓN ..................................................................... 55 5.1. Diagrama de clases ............................................................................................... 58. 5.2. Diagrama de secuencias........................................................................................ 58. 6. IMPLANTACIÓN Y EXPERIENCIAS ...................................................................... 62. 7. MANUAL..................................................................................................................... 63. 8. PROYECCION HACIA FUTUROS TRABAJOS ...................................................... 67. CONCLUSIONES................................................................................................................ 68 BIBLIOGRAFÍA .................................................................................................................. 69. Por: Carlos Iván Poveda R.. Página 6 de 65.

(7) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Figure 2-1 Trama Ethernet 2 ................................................................................................ 10 Figure 2-2 Cabecera IP ......................................................................................................... 12 Figure 2-3 Cabecera.............................................................................................................. 16 Figure 2-4 Segmento TCP .................................................................................................... 17 Figure 2-5 Interfaz Ethereal.................................................................................................. 19 Figure 2-6 Estadísticas Ethereal ........................................................................................... 20 Figure 2-7 Interfaz de JpcapDumper .................................................................................... 23 Figure 2-8 Diagrama de clases de JPCAP ............................................................................ 28 Figure 2-9 Envío de segmento UDP en JPCAP ................................................................... 29 Figure 2-10 Ejemplo envío segmento UDP visto en ethereal .............................................. 30 Figure 2-11 Diagrama de secuencia envío segmento TCP................................................... 32 Figure 2-12 Ejemplo envío segmento TCP visto en ethereal ............................................... 34 Figure 2-13 Diagrama de secuencia recibir paquete ............................................................ 35 Figure 2-14 Protocolos soportados por libnet ...................................................................... 38 Figure 3-1 Frame Muestra detalle de capa 2 Ethernet del frame de establecimiento de conexión. ...................................................................................................................... 41 Figure 3-2 Muestra detalle de capa 3 o IP. ........................................................................... 43 Figure 3-3 Muestra en formato hexadecimal de capa 3 ....................................................... 43 Figure 3-4 detalle de TCP en ethereal .................................................................................. 46 Figure 3-5 Detalle TCP en hexadesimal............................................................................... 47 Figure 3-6 Detalle segmento TCP ........................................................................................ 49 Figure 3-7 Detalle en hexadesimal de segmento TCP......................................................... 50 Figure 3-8 Detalle en hexadesimal de aceptación ................................................................ 50 Figure 3-9 Detalle IP ............................................................................................................ 51 Figure 3-10 Detalle HTTP y TCP ........................................................................................ 52 Figure 5-1 Diagrama de la aplicación................................................................................... 57 Figure 5-2 Diagrama de clases de la aplicación ................................................................... 58 Figure 5-3 Diagrama de secuencia para envío de ICMP echo ............................................. 59 Figure 5-4 Diagrama de secuencia enviar TCP .................................................................... 61 Por: Carlos Iván Poveda R.. Página 7 de 65.

(8) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. INTRODUCCIÓN. Es objetivo de toda actividad académica el alcanzar conocimiento sobre temáticas y tópicos diversos. Como generadora de conocimiento esta actividad académica exige contar con un balanceado contenido teórico-práctico que efectivamente conduzca al resultado esperado. Para lograr el aprendizaje y el entendimiento del funcionamiento de las redes de telecomunicaciones, y la arquitectura de capas sobre la cual se basan todas aquellas orientadas a la transmisión de información paquetizada o por ráfagas, es necesario tener un buen fundamento teórico. Pero como en cualquier área del conocimiento es importante la realización de experimentos y prácticas que conlleven a una interiorización de la teoría aprendida, ya que sin prácticas el conocimiento solo se queda en palabras. En consecuencia, como una contribución a este proceso de aprendizaje en el campo de las redes de telecomunicaciones orientadas a tramas. Se ha decidido desarrollar una herramienta académica que facilite la realización de prácticas de redes en el sentido de entender a profundidad cómo se transporta, efectivamente, la información dentro de las redes de computadores. Es materia del presente documento la presentación de la herramienta desarrollada en este sentido, en el marco del proyecto de grado para la obtención del titulo de Ingeniero de Sistemas.. Por: Carlos Iván Poveda R.. Página 8 de 65.

(9) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 1 DEFINICIÓN DEL PROBLEMA. Después de una investigación para hallar una herramienta que permitiera la edición y envío de paquetes sobre la red se observó que actualmente no hay una herramienta didáctica, de fácil uso y que le permita a los estudiantes de redes comprender conceptos de la implementación de la pila de protocolos TCP/IP (que es la pila de protocolo más utilizada actualmente) de forma práctica y a fondo. En los laboratorios de redes se hace indispensable la manipulación bit a bit de cada uno de los campos de los diversos tipos de trama de los niveles de TCP/IP, con el fin de establecer el funcionamiento de los distintos protocolos, de tal forma que se conduzca hacia el desarrollo de nuevos protocolos, procurando su adaptabilidad a diversos tipos de aplicaciones. Se hace necesaria, entonces, una herramienta que permita lo indicado anteriormente sin necesidad de entrar a programar directamente sobre un lenguaje que dé facilidades de manejo a cada uno de los paquetes desde ethernet (capa 2) hasta la capa de aplicación (http, ftp, ssh. etc.). Estas facilidades incluyen opciones tales como la de tener scrips, ya. predeterminados, que le permitan al usuario el envío sin tener que digitar todo el paquete, además proporciona un corrector de errores que facilita la escritura de cada uno de los bytes del paquete. Adicionalmente, en ocasiones es necesario hacer pruebas sobre aplicaciones de red (servidores, clientes, etc.) para establecer posibles fallas, una de ellas es el envío de paquetes inesperados para observar la reacción de la máquina que contiene la aplicación.. Por: Carlos Iván Poveda R.. Página 9 de 65.

(10) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2 MARCO TEÓRICO. Cuando se hace referencia a transmisión de información por tramas, se alude hoy en el mundo a la aplicación generalizada de protocolos TCP/IP que son el fundamento de Internet; su arquitectura como arquitectura abierta está basada en capas, lo que facilita implementar nuevos protocolos. Ese conjunto de protocolos TCP/IP, al estar integrado plenamente en Internet, también dispone de este tipo de arquitectura. Para el caso que se trata en el presente documento se encuentra conveniente tratar lo relativo a los protocolos de capas 2, 3 y 4, que corresponden en su orden a Ethernet 2, IP y TCP, como con estándares básicos.. 2.1 ETHERNET 2. Es un estándar para la transmisión de datagramas sobre redes ethernet, normalmente LAN o MAN. Datagramas IP que se encapsulan en tramas ethernet, como la que se muestra en la figura siguiente:. Dirección Dirección MAC de. MAC. destino. Fuente (2-bytes). (6-bytes) (6-bytes). Tipo. Datos de cliente. Pad. (Datagrama IP) (0-p bytes) (46- 1500 bytes). opcional. Figure 2-1 Trama Ethernet 2. El campo del tipo de trama ethernet debe contener el identificador de la capa de red para IP cuyo valor hexadecimal es 0x0800 El campo de datos contiene el encabezado IP seguido inmediatamente por los datos IP. La longitud mínima de datos de un paquete transmitido sobre Ethernet 2 es de 46 bytes, de ser necesario se rellena el campo (Padding bytes en Por: Carlos Iván Poveda R.. Página 10 de 65.

(11) EDITOR DIDÁCTICO DE TRAMAS TCP/IP cero), estos bytes de relleno no son parte de la trama IP y no están incluidos en su campo de longitud total, que más adelante se describe. Por otra parte, la máxima longitud del datagrama IP que puede ser enviado sobre Ethernet 2 es de 1500 bytes. En caso de ser necesario transmitir datagramas de mayor tamaño, estos pueden ser fragmentados. Las direcciones MAC son de 6 bytes y se transmiten en la misma trama las direcciones de origen o fuente y destino. Las direcciones IP de 32 bits, como se verá más adelante, son mapeadas a direcciones MAC Ethernet mediante tablas estáticas, tablas dinámicas, búsquedas y para el caso de broadcast se mapea a la dirección genérica FF-FF-FF-FF-FF-FF hex. En el capítulo 3 se puede observar un ejemplo práctico de identificación de todos estos campos.. 2.2 PROTOCOLOS DE CAPA 3. Dentro del conjunto de protocolos de capa 3 se encuentran IP e ICMP, en el presente documento se trata únicamente IP en virtud al objeto central del proyecto que documenta.. IP (Internet Protocol) El protocolo IP habilita la transmisión de datos (datagramas) sobre redes enrutadas, en aplicación de mecanismos flexibles de encaminamiento que pueden atravesar más de una red que incluso tengan límites de tamaño de datagramas diferentes en virtud a los medios físicos de transmisión disponible en cada una de ellas, lo cual hace presumir que un datagrama puede “sufrir” fragmentaciones diversas en su tránsito. Por supuesto el protocolo IP definido en los diferentes campos prevee el manejo de tales fragmentaciones, como se podrá ver más adelante.. Por: Carlos Iván Poveda R.. Página 11 de 65.

(12) EDITOR DIDÁCTICO DE TRAMAS TCP/IP El datagrama consiste en una cabecera o header y datos. Esta cabecera está definida por una estructura de 20 bytes integrada por los campos que se muestran en el gráfico y se explican mas adelante. Al igual que en el caso de Ethernet 2, el ejemplo que se presenta en el capítulo 3 muestra una observación práctica y directa de esta composición.. 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31. Versión. Long. del encabezado. Tipo de servicio. Identificación Time to live. Longitud total del datagrama Flags. Protocolo encapsulado. Fragment offset Checksum (para el encabezado). Dirección IP fuente Dirección IP de destino Opciones y relleno. Figure 2-2 Cabecera IP. 2.2.1 Longitud de la Cabecera. El checksum es un algoritmo que permite detectar cambios en el contenido de la cabecera, en procura de permitir un control de errores y proporcionar la integridad del datagrama. Este campo tiene una longitud de 2 bytes. Se calcula sumando en complemento a 1 todos los campos del header, como palabras de 16 bits. Este campo es de 4 bits, y representa el número de bytes que componen la cabecera, dividido por cuatro. Para 20 bytes, este campo se pone en 5. Por: Carlos Iván Poveda R.. Página 12 de 65.

(13) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.2.2 Versión. El campo versión ocupa 4 bits. Identifica la versión de IP que se esté trabajando, actualmente es 4, pero puede indicarse la versión 6, en experimentación, actualmente.. 2.2.3 Tipo de servicio. Este campo ocupa un byte, precisa la precedencia y la prioridad del datagrama. Los tres primeros bits del byte indican la precedencia que puede ser marcada con valores de 0 a 7, en el que 0 es precedencia normal y 7 está reservada para control de la red. Los valores de 1 a 6 indican mayor precedencia. Los otros 4 bits definen el campo prioridad, que tiene un rango de 0 a 15. Las cuatro prioridades que están asignadas son: 0, (por defecto, servicio normal), 1 (prioridad de ruta de mínimo costo), 2 (máxima fiabilidad), 4 (máxima transferencia), 8 (prioridad de ruta óptima).. 2.2.4 Longitud Total. Este campo se utiliza para identificar la cantidad total de bytes que componen el datagrama.. 2.2.5 Identificación. El valor del campo identificación es un numero secuencial asignado por el Host origen que puede ir de 0 a 65.535. El campo ocupa dos bytes. Este número se combina con la dirección del Host para formar un número único en Internet que sirve para reensamblar los fragmentos de datagramas, en caso que ellos deban ser fragmentados en el proceso de transmisión. Por: Carlos Iván Poveda R.. Página 13 de 65.

(14) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.2.6 Fragment Offset Cuando el tamaño de un datagrama excede el MTU (Maximun Transfer Unit) de una red, el datagrama debe ser fragmentado. El Fragment Offset representa el desplazamiento secuencial de los diferentes fragmentos, en términos de bytes, desde el inicio del datagrama entero.. 2.2.7 Flags El campo flag ocupa 3 bits y contiene dos flags. El bit 5 del campo flags se utiliza para indicar el último datagrama fragmentado cuando toma valor cero (more fragments). El bit 7 lo utiliza el servidor origen para evitar la fragmentacion (don’t fragment).. 2.2.8 Time to live (TTL) El campo TTL ocupa un byte. Representa el número máximo de saltos que un datagrama puede tener, antes de ser descartado. El máximo número de saltos es de 255.. 2.2.9 Protocolo Identifica el protocolo encapsulado en IP. Este es un campo de 1 byte, que normalmente identifica tanto la capa TCP (valor 6), como la capa UDP (valor 17) en el nivel de transporte, pero puede identificar hasta 255 protocolos de la capa de transporte.. 2.2.10. Checksum. El checksum es un algoritmo que permite detectar cambios en el contenido de la cabecera, en procura de permitir un control de errores y proporcionar la integridad del datagrama. Este campo tiene una longitud de 2 bytes. Por: Carlos Iván Poveda R.. Página 14 de 65.

(15) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Se calcula sumando en complemento a 1 todos los campos del header, como palabras de 16 bits.. 2.2.11. Dirección IP fuente. Este campo contiene un identificador de red (Netid) y un identificador de Host (Hostid). El campo tiene una longitud de 32 bits.. 2.2.12. Dirección IP de destino. Este campo contiene el Netid y el Hostid del destino. El campo tiene una longitud de 32 bits.. 2.2.13. Opciones y relleno. La existencia de este campo viene determinada por la longitud de la cabecera. Si esta es mayor de 20 bytes, por lo menos existe una opción. Aunque un Host no esta obligado a poner opciones, puede aceptar y procesar opciones recibidas en un datagrama. El campo Opciones es de longitud variable. Cada byte esta formado por los campos Copia, Clase de Opción y Número de Opción. •. El campo Copia sirve para que cuando un datagrama va a ser fragmentado y viaja a través de nodos o Gateways. Cuando tiene valor 1, las opciones son las mismas para todos los fragmentos pero si toma valor 0, las opciones son eliminadas.. •. Clase de Opción es un campo que cuando tiene valor 0, indica datagrama o control de red; Cuando tiene valor 2, indica depuración o medida. Los valores 1 y 3 están reservados para un uso futuro.. •. El Número de Opción indica una acción específica.. Por: Carlos Iván Poveda R.. Página 15 de 65.

(16) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.3 PROTOCOLOS DE CAPA 4. 2.3.1 UDP (User Datagram Protocol) El protocolo UDP (User Datagram Protocol) habilita servicio de datagramas orientado a transacciones. El servicio no esta orientado a la conexión. La cabecera UDP contiene un número de puerto origen que permite al proceso que lo recibe conocer a dónde responder al datagrama. Formato del mensaje. El datagrama UDP contiene cuatro campos, que son: Número del Puerto de Origen, Numero del Puerto de Destino, Longitud del mensaje y Checksum. 76543210765432107654321076543210 Puerto de origen o fuente. Puerto de destino. Longitud del datagrama. Checksum. Datos UDP Figure 2-3 Cabecera. •. Números de Puerto de Origen y Destino. Estos números, junto con las direcciones IP definen el punto final de la comunicación. El número del puerto de origen, puede tener valor cero si no se usa. El número del puerto de destino solo tiene sentido en el contexto de un datagrama UDP y una dirección IP en particular. El número de puerto de origen es un campo de 16 bits, al igual que el del número de puerto de destino. •. Longitud del datagrama. Este campo tiene una longitud de 16 bits y contiene el número total de bytes que forman el datagrama, incluida la cabecera. Por: Carlos Iván Poveda R.. Página 16 de 65.

(17) •. EDITOR DIDÁCTICO DE TRAMAS TCP/IP Checksum. El uso del checksum es opcional, y este campo debe ponerse a cero si no es utilizado. Mientras que el checksum del datagrama IP solo tiene en cuenta la cabecera del datagrama, el UDP tiene su propio checksum para garantizar la integridad de los datos. La longitud de este campo es de 16 bits, y esta formado por la suma de los campos del UDP, y algunos campos del IP.. 2.3.2 TCP (Transmission Control Protocol) El protocolo TCP proporciona un servicio de comunicación orientado a conexión. Esto lleva a que TCP maneje chequeo de errores, control de flujo y capacidad de interrupción.. Formato del segmento TCP.. 7. 6. 5. 4. 3. 2. 1. 0. Puerto de Origen Puerto de destino Número de secuencia Acknowledgement Long. de cabecera Reservado Reservado Flags Window Checksum Opciones Datos TCP Figure 2-4 Segmento TCP. El segmento TCP consiste en una cabecera y datos. Los campos del segmento TCP son: •. Número de puerto del Origen/destino: Este campo tiene una longitud de 16 bits.. •. Número de Secuencia: es un número de 32 bits que maneja el ordenamiento de los diferentes segmentos para la reconstrucción del Mensaje.. Por: Carlos Iván Poveda R.. Página 17 de 65.

(18) •. EDITOR DIDÁCTICO DE TRAMAS TCP/IP Longitud de la cabecera: Este campo tiene una longitud de 4 bits y contiene un entero igual al número de bytes que forman la cabecera TCP dividido por cuatro.. •. Flags: El motivo y contenido del segmento TCP lo indica este campo. Este campo tiene una longitud de seis bits.. •. o. Bit URG: Este bit identifica datos urgentes.. o. Bit ACK: Cuando este bit se pone a 1, el campo reconocimiento es valido.. o. Bit PUSH: Aunque el buffer no este lleno, el emisor puede forzar a enviarlo.. o. Bit RESET: Poniendo este bit, se aborta la conexión.. o. Bit SYN: Este bit sirve para sincronizar los números de secuencia.. o. Bit FIN: Este bit se utiliza solo cuando se esta cerrando la conexión.. Window: Este campo contiene un entero de 32 bits. Se utiliza para indicar el tamaño de buffer disponible que tiene el emisor para recibir datos.. •. Opciones: Este campo permite que una aplicación negocie durante la configuración de la conexión características como el tamaño máximo del segmento TCP. Si este campo tiene el primer byte a cero, esto indica que no hay opciones.. •. Checksum: Mecanismo para garantizar la integridad de los datos, se calcula tomando un seudo header el cual esta conformado por Dirección IP origen, Dirección IP destino y. cero + número de protocolo (6 decimal) + longitud. segmento TCP (que debemos calcular sumando el header TCP y los datos transportados). Se realiza la suma con aritmética complemento a uno del seudoheader, se obtiene la suma del header TCP y después se calcula la suma de los datos, ya con los tres de resultados se suman y ya se tiene el resultado final.. 2.4 Herramientas de Captura de paquetes (sniffers). El análisis de la composición de las diferentes tramas y/o tipos de tramas fuerza a contar con una herramienta que facilite “husmear” la información que pasa por la línea de Por: Carlos Iván Poveda R.. Página 18 de 65.

(19) EDITOR DIDÁCTICO DE TRAMAS TCP/IP comunicaciones, esta herramienta es generalmente conocida como sniffer. En la actualidad existe una gran cantidad de sniffers (capturadores de paquetes) y algunas herramientas que permiten el envío de paquetes TCP/IP sobre la red, (todas las herramientas que se presentarán en este escrito son GNU por lo tanto su código es libre). A continuación se hará una breve descripción de algunas de ellas que se consideran representativas.. 2.4.1 Ethereal 1. Es un analizador de protocolos de red que permite la captura de paquetes (TCP/IP) que. pasan por la interfaz de red (tarjeta de red). Éste tiene la capacidad de diseccionar (analizar capa por capa) el paquete, mostrando claramente cada uno de los campos de los encabezados de la mayoría de paquetes TCP/IP.. Figure 2-5 Interfaz Ethereal 1. Tomado de: Pagina principal Ethereal: Noviembre 29 2003 http://www.ethereal.com/. Por: Carlos Iván Poveda R.. Página 19 de 65.

(20) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Ethereal cuenta con una interfaz gráfica que cuenta con un espacio para mostrar el resumen de los paquetes que pasan por la interfaz de red. La información que muestra en este resumen es la fuente (dirección IP fuente), el destino (Dirección IP de destino), protocolo (a qué protocolo pertenece el paquete) y una pequeña información que explica en qué consiste el paquete. La interfaz también tiene una zona en la que se muestran los detalles de los encabezados de cada paquete y el contenido del mismo. Entre sus principales funcionalidades está la de proveer un filtrado de paquetes que facilita el análisis de tráfico, ya que se puede disminuir la cantidad de paquetes mostrados de forma tal que solo se desplieguen los paquetes de interés para cada uno de los usuarios del sistema. Cada filtro se expresa como una función que devuelve falso o verdadero. Un ejemplo de un filtro sencillo seria: tcp.port == 80 and ip.src == 192.168.2.1 Este filtro simplemente captura todos los paquetes con puerto 80 y que la fuente tenga como dirección IP 192.168.2.1; entonces si esta expresión llega a ser verdadera el paquete será mostrado en la aplicación. Ethereal muestra estadísticas de tráfico de red cursado desde el momento que se activa la captura, también permite guardar datos tráfico en archivos con un formato estándar. A continuación se muestra el visor de estadísticas.. Figure 2-6 Estadísticas Ethereal. Por: Carlos Iván Poveda R.. Página 20 de 65.

(21) EDITOR DIDÁCTICO DE TRAMAS TCP/IP La librería utilizada para la captura de datos en ethereal es libpcap de la que más adelante se hace referencia. Algunos de los protocolos que actualmente tiene la capacidad de analizar son: 802.11 MGT ARP/RARP: Address resolution protocol Este protocolo permite la asociación de una dirección IP a una dirección MAC. DNS: Domain name system protocolo que permite hallar la dirección IP de un equipo a partir de una url (dominio) H.261: Protocolo para codificación de video en baja rata de bits. H.263: Protocolos de señalización en multimedia. H.225: Protocolo de control para aplicaciones multimedia H.245: Protocolo de servicios suplementarios. H.323: Protocolo de señalización para tráfico de Voz sobre IP. ICMP: Control Message protocol este es un protocolo que contiene un conjunto de mensajes para mantener control sobre la comunicación entre varias máquinas. ICQ: Protocolo utilizado para sistemas de chat. IEEE 802.11 protocolo de enlace. HTTP Hypetext transfer protocol protocolo diseñado para el envío de paginas web. RIP protocolo de enrutamiento SNMP protocolo para la administración de dispositivos de red TELNET protocolo diseñado para abrir sesiones remotas dentro de servidores Estos son algunos pocos de la gran cantidad de de protocolos que ethereal tiene la capacidad de analizar.. Por: Carlos Iván Poveda R.. Página 21 de 65.

(22) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.4.2 TcpDump y WinDump Como Ethereal, es un analizador de paquetes que captura el tráfico que fluye sobre una interfaz de red determinada. A diferencia de ethereal este sniffer funciona en interfaz de texto, por lo tanto las ayudas prestadas no son tan buenas como las que presta Ethereal aunque TcpDump y WinDump permiten, mediante distintos flags, observar cada el paquete completo en formato hexadecimal. WinDump y TcpDump en cuanto a su funcionalidad son muy parecidos Ethereal, aunque con las limitaciones que da la interfaz de texto. La representación de un paquete sin poner ningún flag activado esta dado por la siguiente línea: 14:49:21.314293 IP CASA.mshome.net > pc1.mshome.net: tcp (frag 2740:1480@1496+). 14:49:21.314293: hora en que capturó el frame. CASA.mshome.net: Máquina fuente. pc1.mshome.net: Máquina destino. Tcp: protocolo.. 2.4.3 JpcapDumper JpcapDumper es como los dos anteriores, un programa que permite la captura y el análisis de tráfico de red con la diferencia que JpacapDumper está programado en java (aunque por debajo utilice winpcap y libpcap). Cuenta con una interfaz en swing que le permite un manejo amigable y fácil. En cuanto a la cantidad de protocolos que tiene la capacidad de manejar es mucho más reducida que tcpdump y ethereal. Tiene herramientas para el análisis de tráfico más avanzado que los anteriores. JpcapDumper corre tanto en Windows como en linux. Por: Carlos Iván Poveda R.. Página 22 de 65.

(23) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Figure 2-7 Interfaz de JpcapDumper. 2.5 Herramientas de inyección de paquetes. El desarrollo de una herramienta como la que se propone el presente trabajo requiere del uso de recursos que permitan inyectar paquetes y tramas en la perspectiva de ejecutar pruebas conducentes a establecer capacidades y/o funcionalidades de las diferentes librerías. Entre éstas se tienen:. Por: Carlos Iván Poveda R.. Página 23 de 65.

(24) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.5.1 Hping2 Es un programa hecho en interfaz de comandos que permite el envío TCP/IP. Al igual que el ping normal este tiene la funcionalidad de poder enviar paquetes ICMP para establecer si una maquina se encuentra “arriba” (activa o corriendo) o no, pero también cuenta con muchas otras funcionalidades tales como hacer pings TCP o UDP, dándose de esta forma cuenta si una máquina determinada tiene un puerto abierto o cerrado. 2. Además proporciona la capacidad de cambiar los siguientes campos: •. Permite el envío de cualquier frame TCP/IP sobre la red (opción raw).. •. En el paquete IP se pueden correr las siguientes opciones relacionados con cada uno de los campos que tiene el datagrama IP: o IP destino: Como cualquier ping se envía a una dirección. o IP fuente: Este es conocido como IP spooffing simplemente es cambiar la dirección IP real del host que envía al paquete. o TTL time to live: Este campo se adopta como el número máximo de nodos por el cual puede pasar el datagrama antes de ser desechado. o ID: número único del datagrama IP dentro de una conexión (este número es asignado por la implementación de IP que este corriendo). o Fragment: establece si el datagrama se encuentra fragmentado o no. o More fragments: Si un datagrama fragmentado no se a enviado completamente, entonces, el flag estará prendido para que la maquina destino espere todo el datagrama, por lo tanto el ultimo fragmento tendrá el flag apagado o Fragment offset: Establece en que parte del datagrama total se encuentra el fragmento. o. MTU: tamaño máximo del datagrama IP permitido por cada red (en ethernet está en 1500).. 2. tomado del ariculo Ping Man Page: http://www.hping.org/manpage.html septimbre 10 de 2003. Por: Carlos Iván Poveda R.. Página 24 de 65.

(25) EDITOR DIDÁCTICO DE TRAMAS TCP/IP o TOS. Tipo de servicio •. En el frame TCP y UDP hping2 cuenta con las siguientes opciones relacionadas con cada uno de sus campos: o Puerto fuente. o Puerto destino. o Win tamaño de la ventana. o Seq Número de secuencia del paquete. o Checksum: en Hping2 es posible enviar segmentos con el checksum inválido. o Time stamp. o Flags de estado syn, push, akc.rst, urg, xmas y ymas. •. Datagrama ICMP. o ICMP type campo permite establecer que tipo de mensaje se esta enviando (echo request o replan, etc.). o Time stamp.. Hping2 tiene muchas otras opciones dedicadas a obtener información de la máquina destino pero no son de interés en el propósito del presente trabajo. Esta herramienta está solo hecha para correr sobre linux. A continuación se muestra un ejemplo de ataque de combinación sospechosa de flags TCP con hping2: Comando: hping2 –S –R –A –P –U –F –d 65000 –i u1 192.168.0.102 En este caso, se está enviando un paquete TCP cada microsegundo con puerto fuente aleatorio y con puerto destino igual a 0. Además, van encendidos los flags SYN, RESET, ACK, PUSH, URG y FIN. El tamaño de los datos del paquete es de 65000 bytes.. Por: Carlos Iván Poveda R.. Página 25 de 65.

(26) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.5.2 Nemesis 3. Herramienta hecha por comandos (en modo texto) que permite la creación de paquetes a. mano. Corre sobre windows y sobre linux. Nemesis provee la posibilidad de creación e inserción de frames en los campos de los siguientes frames de los siguientes protocolos: arp dns ethernet icmp igmp ip ospf rip tcp udp Para cada uno de los protocolos nombrados anteriormente nemesis tiene la posibilidad de modificar cada uno los campos de los headers y el contenido. Esta herramienta utiliza la librería libnet que provee las funciones necesarias para poder poner paquetes directamente sobre la interfaz de red.. 3. Nemesis: http://www.packetfactory.net/projects/nemesis/ junio29 2003. Por: Carlos Iván Poveda R.. Página 26 de 65.

(27) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 2.6 Librerías para captura de paquetes. Para la realización del programa será necesario valerse de un librería que tenga la capacidad de capturar paquetes y que facilite el manejo de los paquetes IP. A continuación se describen las analizadas como parte de este trabajo. Jpcap Es un API en java que presta los servicios de captura y envío de paquetes TCP/IP. Jpcap utiliza LibPcap (Linux) o WinPcap (Windows), como también lo hace con los servicios de C por medio de JNI poniéndolos al servicio de Jpcap. A continuación, se muestra cómo esta diseñado Jpcap y cómo es el envío de un paquete mediante este API.. Por: Carlos Iván Poveda R.. Página 27 de 65.

(28) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. JpcapHandler (from jpcap). Datalink Pack et (from jpcap). JpcapSender. +datalink. (from jpcap). JpcapW riter (from jpcap). Packet EthernetPacket. (from jpcap). (from jpcap). Jpcap (from jpcap). +ippacket IPPacket. ICMPPacket. (from jpcap). (from jpcap). ARPPacket (from jpcap). +router_ip[] +redir_ip. +dst_ip +src_ip. IPAddress (from jpcap). UDPPacket +addrs[]. (from jpcap). TCPPacket (from jpcap). IPv6Option (from jpcap). Figure 2-8 Diagrama de clases de JPCAP. Por: Carlos Iván Poveda R.. Página 28 de 65.

(29) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Diagramas de secuencia. Enviar paquete UDP Este diagrama de secuencia muestra como enviar un paquete UDP sobre la red. Enviar paquete UDP UDPPacket. ClaseEnviar UDP. Jpcap. JpcapSender : DatalinkPacket. 1: UDPPacket(src_port : int, dst_port : int) 2: setIPv4Param eter() : void. Este m etodo retorna todas las interfaces de red con las que cuenta la m aquina 4: getDeviceList() : Logical View::java::lang::String[]. 3: getDeviceList() : Logical View::java::lang::String[]. 5: openDevice(device : Logical View::java::lang::String) : JpcapSender. 6: sendPacket(packet : IPPacket). UDPPacket extiende de IPPacket por esta razon el paquete UDP puede utilizar m etodos de IP.. Figure 2-9 Envío de segmento UDP en JPCAP. import jpcap.*; class ClaseEnnviarUDP {. public static void main(String[] args) throws java.io.IOException{ //Se crea un paquete udp con enviado a los puertos 12345 y 54321 estos son los puertos que con los que se enviarán / UDPPacket p=new UDPPacket(12345,54321);. Por: Carlos Iván Poveda R.. Página 29 de 65. /los paquetes.

(30) EDITOR DIDÁCTICO DE TRAMAS TCP/IP //Ya que UDP esta encapsulado en el paquete IP se hace necesario asignar valores al encabezado IP. p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,0, new IPAddress("192.168.0.2"),new IPAddress("192.168.0.1")); //Se le asigna los datos con los que se enviará el paquete p.data="datossssss".getBytes(); //Se define por cual interface de red se va a enciar el paquete JpcapSender sender=JpcapSender.openDevice(Jpcap.getDeviceList()[0]); for(int i=0;i< 2 ;i++) //Se envían dos veces los paquetes sender.sendPacket(p); } }. Figure 2-10 Ejemplo envío segmento UDP visto en ethereal. Por: Carlos Iván Poveda R.. Página 30 de 65.

(31) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Se observa que: •. La dirección MAC es puesta por defecto.. •. El paquete tiene un cheksum incorrecto.. •. El paquete que se envió no va fragmentado ya que los flags de more y don’t fragments no van activos.. •. El tamaño del encabezado IP es de 20 bytes que es el tamaño normal del paquete IP.. •. El tiempo de vida que se envió con un valor de 100 saltos y ahora está con un valor de 99 (esto se da por que ya paso por la primera interfaz de red).. •. Los puertos a los cuales se envió son: src: 12345 y dst: 54321. •. El tipo de protocolo encapsulado es UDP # 11 (este número es asignado automáticamente al enviar un UDPPacket). Por: Carlos Iván Poveda R.. Página 31 de 65.

(32) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Enviar paquete TCP Enviar paquete TCP ClaseEnviar UDPPacket UDP 1: TCPPacket(src_port : int, dst_port : int, sequence : long, ack_num : long, urg : boolean, ack : boolean, psh : boolean, rst : boolean, syn : boolean, fin : boolean, rsv1 : boolean, r). Jpcap. JpcapSender : DatalinkPacket. 2: setIPv4Parameter() : void. 3: getDeviceList() : Logical View::java::lang::String[]. Este metodo retorna todas las interfaces de red con las que cuenta la maquina. 4: getDeviceList() : Logical View::java::lang::String[]. 5: openDevice(device : Logical View::java::lang::String) : JpcapSender. 6: sendPacket(packet : IPPacket). UDPPacket extiende de IPPacket por esta razon el paquete UDP puede utilizar metodos de IP.. Figure 2-11 Diagrama de secuencia envío segmento TCP. Codigo: import jpcap.*;. class enviarTCPPacket { public static void main(String[] args) throws java.io.IOException{ System.out.println(Jpcap.getDeviceList()[0]); JpcapSender sender=JpcapSender.openDevice(Jpcap.getDeviceList()[0]);. Por: Carlos Iván Poveda R.. Página 32 de 65.

(33) EDITOR DIDÁCTICO DE TRAMAS TCP/IP //lo único que cambia respecto al paquete UDP es que se utilizó la clase llamada TCPPacket que tiene un encabezado distinto. El flag de SYN esta activado. TCPPacket p=new TCPPacket(1254, 5678, 0, 0, false ,false, false, false, true, false, false, false, 514 , 1) ; p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,0, new IPAddress("192.168.0.36"),new IPAddress("192.168.0.1")); p.data="datossssss".getBytes();. for(int i=0;true;i++) sender.sendPacket(p); } }. Por: Carlos Iván Poveda R.. Página 33 de 65.

(34) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Figure 2-12 Ejemplo envío segmento TCP visto en ethereal. Observaciones: •. El header IP enviado es idéntico al del anterior paquete por lo tanto tiene los mismos flags de ese paquete UDP.. •. El paquete esta haciendo una petición de SYN.. •. Como en el anterior paquete esta enviándolo con checksum erroneo.. •. Por: Carlos Iván Poveda R.. Página 34 de 65.

(35) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Recibir paquete. RecivirPaqu etes. : Jpcap. : JpcapHandler. 1: openDevice(Logical View::java::lang::String, int, boolean, int). 2: loopPacket(int, JpcapHandler). Interfaz que es llamada cada vez que es detectada un paquete en la interfaz de red con la que se creó. Figure 2-13 Diagrama de secuencia recibir paquete. Para poder recibir paquetes con Jpcap se hace necesario implementar la interfaz JpcapHandler ya que ella es la encargada de obtener todos los paquetes de la interfaz de red. A continuación, se va a mostrar un ejemplo sacado de la página de Jpcap que ilustra como hacer un sniffer muy sencillo con esta librería:. import jpcap.*; class Tcpdump implements JpcapHandler // la clase tcpdump implementa JpacHandler para de esta //forma poder acceder los paquetes que pasan por la interfaz. { public void handlePacket(Packet packet){ System.out.println(packet); // cada clase tiene una implementación para pasar a string por esta //razón muestra imprime cada paquete de acuerdo a que clase e.. Por: Carlos Iván Poveda R.. Página 35 de 65.

(36) EDITOR DIDÁCTICO DE TRAMAS TCP/IP public static void main(String[] args) throws java.io.IOException { String[] lists=Jpcap.getDeviceDescription(); // se halla la lista de interfaces de red con las que //cuenta el computador System.out.println("Start capturing on "+lists[0]); // Se prepara la interfaz de red en este caso es la interfaz 0 Jpcap jpcap=Jpcap.openDevice(Jpcap.getDeviceList()[0],1000,false,20); //Se inicia el spooffing asignadole cual JpcapHandler se va a utilizar jpcap.loopPacket(-1,new Tcpdump()); Como conclusión se puede decir que Jpcap es un API bueno para la captura de paquetes pero no es muy recomendable para el envío de paquetes ya que le hace falta muchas funcionalidades para ser un buen creador de paquetes a mano. Además, éste no tiene la capacidad de enviar paquetes ethernet.. Winpcap – Libpcap Casi todo sistema operacional proporciona semántica diferente sobre el acceso a la funcionalidad de captura de paquetes de red de bajo nivel. Esta semántica parece misteriosa y a menudo mnemónica, haciéndola compleja para escribir un código portable. La biblioteca libpcap dirige estas preocupaciones proporcionando un API de alto nivel en el marco de captura paquetes de muchos sistemas operacionales. Por estandarización de la interfaz, libpcap proporciona una capa de abstracción para el programador, facilitando el desarrollo rápido de aplicaciones portables. Libpcap es un recurso open-source en C, disponible para el suministro de una interfaz de usuario para la captura de paquetes a través de una amplia gama de plataformas. Las aplicaciones que utilizan libpcap incluyen la colección de estadísticas de red, la eliminación de fallas de red, y un fuerte recurso para la supervisión de seguridad avanzada de red y suites de colección de la información.. Por: Carlos Iván Poveda R.. Página 36 de 65.

(37) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Mientras el papel principal del libpcap debe proporcionar un marco sólido para la captura de paquetes, también ofrece la funcionalidad adicional para el soporte de filtración de paquetes y captura de archivos fuera de línea. Pasos que se siguen para inicializar la captura de paquetes: •. Obtener las tarjetas o interfaces de red (NICs). •. El dispositivo que se usa para la captura se asocia al contexto de red y a éste se le asocia un filtro de paquetes.. •. Mediante la función openalive se da comienzo a la captura. 2.7 Librerías para inyección de paquetes. Para la realización del programa es necesario valerse de un librería que tenga la capacidad de enviar frames y que facilite su manejo. Se observaron varias de estas librerías; a continuación se describe la más utilizable. Libnet Es una interfaz portable que corre sobre Linux, Windows y FreeBSD. 4. Esta es una librería escrita en C que tiene las funciones necesarias para poder crear a mano. y capturar paquetes que son procesados por la tarjeta de red. Libnet ha sido diseñada como una librería liviana y fácil de usar, compuesta por 8000 líneas de código en 43 archivos, 63 funciones públicas para el acceso al programa. Actualmente soporta 6 protocolos.. 4. Libnet 101, Part 1: The Primer Michael D. Schiffman : http://www.packetfactory.net/papers/Libnet-primer/libnet-primer.pdf. Por: Carlos Iván Poveda R.. Página 37 de 65.

(38) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Figure 2-14 Protocolos soportados por libnet. Libnet esta diseñada como una librería portable tiene la capacidad de correr sobre los siguientes sistemas operativos: · OpenBSD 2.2 - 2.7 (i386) · FreeBSD 2.2 - 4.0 (i386) · NetBSD 1.3.x (i386) · BSD/OS 3.x (i386) · BSDi 3.0 (i386) · Linux 2.2.x, 2.0.3x, 2.1.124 (i386, alpha); (libc: 2.4.x, glibc: 2.0.x) · Solaris 7 (SPARC, gcc 2.7.2[13], 2.8.2), 2.6 (SPARC, gcc 2.8.2), 2.5.x (SPARC, gcc 2.7.2[13]) · IRIX; 6.x · MacOS 5.3rhapsody (powerpc) · Windows NT 4.0 and 5.0 (i386). Se observa que Libnet tiene la capacidad de correr en gran cantidad de plataformas por esta razón es una muy buena opción para llevar a cabo la aplicación. Por: Carlos Iván Poveda R.. Página 38 de 65.

(39) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Libnet esta construida en forma modular, es decir todo el programa esta compuesto por varios módulos que conforman un todo. Cada módulo está compuesto por su propia interfaz y la implementación de la misma. Libnet soporta gran cantidad de protocolos por esta razón permite el acceso al programador para enviar sobre la red una variedad importante de paquetes bajo tales diversos protocolos que existen actualmente. Esta librería provee distintos modos de envío de paquetes para que el usuario pueda manejar los tipos de frames posibles de enviar, controlando la calidad de los mismos. Da al programador la posibilidad de hacer cualquier paquete y poderlo inyectar en la red. Además, Libnet provee entre otras funcionalidades para el desarrollo de herramientas libres de envío de paquetes la siguiente: Resolución de direcciones: Estas funcionalidades permiten establecer la validez de una dirección IP y poner estas en el formato en el que será utilizado para el envío; es decir big endian a nivel bit, pero little endian a nivel byte; por ejemplo si una dirección IP es 192.168.0.1, quedaría aplicándole las funciones de libnet, así: 1.0.168.192 en un formato aceptado en las redes.. 2.8 Otras librerias. En el desarrollo del presente trabajo se analizó, se probó con poco éxito y se decidió no considerar el uso de la librería Iwip como una implementación liviana de TCP/UDP/IP. Iwip (implementación de TCP/IP): Esta es una implementación de la pila de protocolos TCP/IP. Su principal ventaja es que no es necesario ceñirse a la implementación de TCP/IP prestada por el sistema operativo. Iwip está diseñado para ser liviano y por tanto no consume muchos recursos de máquina. Las funcionalidades con las que viene IWIP son las siguientes:. Por: Carlos Iván Poveda R.. Página 39 de 65.

(40) EDITOR DIDÁCTICO DE TRAMAS TCP/IP •. IP (Internet Protocol). Incluyendo redirección de paquetes sobre multiples redes.. •. ICMP (Internet Control Message Protocol). •. UDP (User Datagram Protocol). Para datagramas.. •. TCP (Transmission Control Protocol). Con control de congestionamiento. •. Specialized no-copy API for enhanced performance. •. Optional Berkeley socket API. Por: Carlos Iván Poveda R.. Página 40 de 65.

(41) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 3 EJEMPLO DE DISCRIMINACIÓN DE CAMPOS EN TRAMAS Y DATAGRAMAS DE CAPAS 2,3 Y 4 Para ilustrar lo anteriormente expuesto, se muestra un ejemplo que permite comprender de forma más práctica lo que ocurre en una petición de información en una red TCP/IP. Para esto se utiliza el protocolo de aplicación http con el cual se solicita información por medio del comando “GET”, definido por este protocolo.. 3.1 SOLICITUD DE CONEXIÓN Dado que se trata de http sobre TCP es necesario hacer la conexión. A continuación se mostrará el establecimiento de ésta mediante el procedimiento de TCP conocido como Three-way handshake:. 3.1.1 ANÁLISIS EN CAPA 25 (ETHERNET) Primero se envía un segmento TCP con el flag Acknowledgement prendido (bit en 1), procedimiento normal para pedir el establecimiento de la conexión. A continuación se muestra como se ve el frame TCP/IP6, detallado en la segunda capa. . Figure 3-1 Frame Muestra detalle de capa 2 Ethernet del frame de establecimiento de conexión.. 5. Se alude al modelo OSI/ISO. Arquitectura por capas. Capturado mediante un sniffer que para el caso y todos los demás que se analizan en el presente documento es ETHEREAL.. 6. Por: Carlos Iván Poveda R.. Página 41 de 65.

(42) EDITOR DIDÁCTICO DE TRAMAS TCP/IP En la capa 2 “ethernet” vista en código hexadecimal corresponde con el header ethernet, integrado por los siguientes campos: direcciones MAC fuente y destino, y Type7:. Que se discriminan así: Campo de dirección MAC destino (sombreada):. Campo de dirección MAC fuente (sombreada):. Campo “Type”, en este caso es 0x0800, encadenamiento binario que significa que el protocolo encapsulado es IP:. 3.1.2 ANÁLISIS EN CAPA 3 (IP) El mismo frame anterior, mostrando en detalle la capa 3 (IP) muestra el Header IP como se puede observar a continuación:. 7. Type: Campo que representa el protocolo encapsulado. En este caso es IP.. Por: Carlos Iván Poveda R.. Página 42 de 65.

(43) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Figure 3-2 Muestra detalle de capa 3 o IP.. Frame de petición de establecimiento de conexión TCP/IP (GET http).. Muestra de header IP en formato hexadesimal, sombreado.. Figure 3-3 Muestra en formato hexadecimal de capa 3. Campos de versión de IP y tamaño del encabezado. En este caso el ejemplo se desarrolla bajo IP Version 4, por tanto el tamaño de su encabezado es de 20 bytes, como se observa en el siguiente encadenamiento de bits (sombreado).. Por: Carlos Iván Poveda R.. Página 43 de 65.

(44) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Visto en código binario, este campo 0x45 será: 0100 0101 Versión 4 Longitud 5x4= 20 El campo de Type of service es 00 esto quiere decir que está por defecto o sea que no se le hará ningún tratamiento especial a esta datagrama.. En el campo longitud total de la datagrama que es calculada por la estación que la envía, mediante la suma de la longitud de los encabezados IP, TCP (UDP o cualquier protocolo de transporte) y de la longitud del “Pay load”, es registrado en el campo sombreado. En este caso que no hay datos (pay load), en tanto se trata de un datagrama de solicitud de conexión, la longitud de datagrama se calcula por la suma de la longitud de los encabezados; quedando una longitud total de 0x30 (48 decimal) .. Longitud del encabezado IP:. 20. Longitud del encabezado TCP:. 20. Longitud de opciones TCP:. 8. Longitud total de datagrama:. 48. El campo Identificación de datagrama que es asignado por el sistema operativo en este caso es 0x41F8 (16888), es señalado mediante sombreado:. El campo Flags de fragmentación, integrado por dos bits que son los dos últimos del byte sombreado. En este caso está con un valor de 0x4 la representación en binario seria: 10 por lo tanto el flag de don’t fragmet que es el primero esta en 1. Esto quiere decir que el Por: Carlos Iván Poveda R.. Página 44 de 65.

(45) EDITOR DIDÁCTICO DE TRAMAS TCP/IP datagrama no esta fragmentado por lo tanto el host destino no tiene que ensamblarlo. El segundo flag que es el de more fragements como su nombre lo dice indica si el datagrama se compone de más fragmentos.. El campo Fragment offset: en el evento en que se fragmenten los datagramas, el proceso de ensamblado requiere del conocimiento de la cantidad de bytes enviados desde el transmisor y la organización de estos en el datagrama. El campo fragment offset contiene esta información. En este caso por ser un paquete que no esta fragmentado el valor del fragment offset es 0. Este campo es de 13 bits y el valor de su contenido está dado en bytes; se localiza en la parte sombreada.. Campo Time to live. Está diseñado para que la datagrama no se quede “deambulando” indefinidamente en la red. El valor de éste campo indica el tiempo máximo que el datagrama permanece en la red. En este caso el tiempo que este datagrama está dado por 0x80 (128). = 128 saltos. El campo TTL es de 2 bytes.. El campo de Protocolo encapsulado que se sombrea, en este caso tiene un valor de 06 que significa que es TCP. Otros protocolos se señalan como sigue: 1:. ICMP = Internet control message protocol. 17:. UDP = User data protocol. 6:. TCP = Transmision control Protocol. Por: Carlos Iván Poveda R.. Página 45 de 65.

(46) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. El campo Checksum campo para revisar integridad de datos, control de errores, se señala sombreado.. Campo de Direccion IP fuente: está compuesto por 4 bytes. En este caso ella es 192.168.0.101 (C0 A8 00 65).. Campo de Direccion IP destino: está compuesta por 4 bytes 200.93.140.145 (C8 5D 8C 91).. 3.1.3 ANÁLISIS EN CAPA 4 (TCP) TCP transmission control protocol. Figure 3-4 detalle de TCP en ethereal. Por: Carlos Iván Poveda R.. Página 46 de 65. en este caso es.

(47) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Encabezado TCP:. Figure 3-5 Detalle TCP en hexadesimal. Campo Puerto fuente por el cual se está haciendo la petición de conexión. Está compuesto por de 2 bytes (16 bits). 0x1079 (4217), es decir que se está conectando por el puerto 4217.. Campo Puerto destino, para el ejemplo se esta haciendo la petición de la conexión por el puerto 80 (0x50) propio de la aplicación HTTP.. Campo de secuencia permite establecer el orden del segmento, en este caso el valor es: 1349034191 en decimal. Campo Tamaño del header TCP, en este caso el tamaño es 28 TCP+Options. El tamaño del header ocupa 6 bits.. Campo Flags TCP: permiten establecer qué tipo de solicitud se esta haciendo al servidor. En este caso se esta tratando de establecer una conexión; por esta razón el flag es syn (de sincronización): Otros flags de TCP son:. 8. Valor binario8. Tipo de flag. 0. Ventana de reducción de congestión. Valores correspondientes al ejemplo bajo análisis. Por: Carlos Iván Poveda R.. Página 47 de 65.

(48) 0. EDITOR DIDÁCTICO DE TRAMAS TCP/IP ECN. 0. Urgent. 0. Acknowledgement. 0. Push. 0. Reset. 1. SYN. 0. FIN. Campo Window size: es un campo de 32 bits que especifica el tamaño del buffer que tiene el transmisor disponible para recibir datos. Para el ejemplo es 16.384 bytes.. Checksum campo para verificación de integridad de datos o control de errores.. Campos Options: Estos campos están diseñados para establecer datos de configuración de la conexión, ejemplo el tamaño máximo del segmento.. Si el primer byte es cero(0). significa que no hay opciones.. Luego de enviar el anterior frame con el flag de sincronización en 1 o prendido el host espera la recepción del siguiente segmento:. Por: Carlos Iván Poveda R.. Página 48 de 65.

(49) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 3.2 ACEPTACIÓN DE CONEXIÓN. Figure 3-6 Detalle segmento TCP. Si se observa el segmento tiene los flag de ACK y SYN prendidos: 00010010 ……... ……... Esto quiere decir que el servidor esta dispuesto a establecer la conexión. Con respecto al anterior segmento de petición de conexión de TCP se observa que el valor del campo secuencia (seq) cambió en tanto ya será el valor del acknowledgement anterior más 1.. Por: Carlos Iván Poveda R.. Página 49 de 65.

(50) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Figure 3-7 Detalle en hexadesimal de segmento TCP. Entonces: 1349034191 + 1 = 1349034192 (0x5068A0D0) = SEC + 1. Campo Ack:. Campo Secuencia: 1945578567 (0x73F72C47). Campo Window cambió a 5840 (0x16D0). El cliente responde enviando un segmento con el flag syn prendido:. Figure 3-8 Detalle en hexadesimal de aceptación. Campo Flags, muestra el syn en 1. 00010000 ......... ….... Campo Secuencia: vuelve a cambiar su valor y corresponde con el del ACK del anterior segmento 1349034192 (0x5068A0D0). Por: Carlos Iván Poveda R.. Página 50 de 65.

(51) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Campo Acknowledgement: Este también cambia su valor a SEQ +1 anterior = ACK del nuevo segmento. 1945578568 = 0x73f72c48. Después de terminar la transacción antes descrita ya esta establecida la conexión por esta razón ya es posible iniciar a hacer requerimientos al servidor:. 3.3 TRANSFERENCIA DE INFORMACIÓN. En este ejemplo vamos a pedirle al servidor que envíe la pagina web situada el path Avantel/index.html. Figure 3-9 Detalle IP. Por: Carlos Iván Poveda R.. Página 51 de 65.

(52) EDITOR DIDÁCTICO DE TRAMAS TCP/IP En este caso no va fragmentado el datagrama ya que el offset es 0 y el flag de don’t fragment esta en 1 (prendido). …... …... Se identifica que el segmento tiene prendidos los flags de push y ack, esto quiere decir que ya se encuentra tanto el servidor como el host conectados. Luego de que el host hace la petición, el servidor responde enviando la información correspondiente a la página web solicitada (index.html). El servidor responde que ya recibió el segmento enviado anteriormente.. Y retorna la página requerida por el usuario:. Figure 3-10 Detalle HTTP y TCP. Por: Carlos Iván Poveda R.. Página 52 de 65.

(53) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Al final es recibida la información y mostrada al usuario. En este paquete también se observa que los flags prendidos son push y ack, por lo tanto se esta enviando la página en si misma.. Por: Carlos Iván Poveda R.. Página 53 de 65.

(54) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 4 ANÁLISIS DE REQUERIMIENTOS. Casos funcionales: Caso funcional numero 1: Permitir la creación manual de todo el paquete (es decir desde el encabezado ethernet) en formato hexadesimal. Caso funcional numero 2: Enviar sobre la red cualquier paquete hecho por el usuario. Caso funcional numero 3: Dar ayudas al usuario que le permitan establecer si el paquete está bien formado o tiene datos inconsistentes. Caso funcional numero 4(en proceso): Dar la opción al usuario de enviar un conjunto de paquetes de forma cíclica, de acuerdo con el número de veces y con el tiempo entre envíos (tiempo que hay de retardo entre cada uno de los paquetes enviados, especificado por el usuario). Caso funcional numero 5: Darle la opción al usuario de cambiar cualquier paquete en cualquier momento. Caso funcional numero 6: Enviar paquetes ethernet, IP, ICMP, UDP y TCP a la interfaz de red que haga posible la transmisión de datos sobre la red.. Por: Carlos Iván Poveda R.. Página 54 de 65.

(55) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 5 ARQUITECTURA DE LA SOLUCIÓN. La búsqueda de una herramienta que permitiera la captura e inyección de frames con la perspectiva de su manipulación experimental y con la funcionalidad suficiente para la interpretación, manejo y eventual diseño de frames requiere de la generación y manejo de librerías. Con base en el análisis planteado en el Marco Teórico y después de tratar con varias librerías, se optó por utilizar LIBNET como la librería para inyección de paquetes y WINPCAP (LIPCAP) como librería de captura y filtraje de frames. Como se deduce del análisis que se presenta en el capítulo 2, estas librerías dan la suficiente robustez y flexibilidad para alcanzar los objetivos propuestos. La herramienta en desarrollo debe proporcionar una interfaz de usuario amigable y por lo tanto poblada de componentes gráficos que liberen al estudiante de la relación con la máquina de pruebas y pueda concentrarse en el meollo de las prácticas familiarizándose con los frames de TCP/IP. Adicionalmente, dados los casos funcionales planteados, la interfaz debe ser multiplaforma. En consecuencia se optó por usar swing (java). Dado que las librerías aplicadas están en C, se hizo necesario encontrar una de forma de acoplar los lenguajes C y Java, lo cual se logró con el uso de JNI (Java Native Interface). La figura siguiente muestra la arquitectura propuesta y construida en el desarrrollo de este proyecto, integrada por: •. La aplicación o interfaz swing, encargada de la interacción con el usuario. •. La Fachada Editor que actúa como puente o interfaz entre el mundo C y el mundo Java. Fachada desarrollada en Java.. •. JNI (Java Native Interface) actúa como intermediario entre la aplicación java y la las librerías en C.. Por: Carlos Iván Poveda R.. Página 55 de 65.

(56) •. EDITOR DIDÁCTICO DE TRAMAS TCP/IP Editor Packets es una librería desarrollada como parte de este proyecto que provee la funcionalidad necesaria para la manipulación de los frames. Esta librería soporta los siguientes protocolos: Ethernet II Tcp Udp Icmp Entre las principales funcionalidades con las que cuenta son: Creación de frames raw: Permite la creación y envío de cualquier mensaje insertado. Construcción automática de datagramas IP: Solo con la dirección destino y el tipo de protocolo es posible hacer un Datagrama IP. Envió de frames.. •. Las librerías Winpcap y Libnet.. Por: Carlos Iván Poveda R.. Página 56 de 65.

(57) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Aplicación Java. Librería editor FachadaEditor JNI EditorPackets. WinPcap. Figure 5-1 Diagrama de la aplicación. Por: Carlos Iván Poveda R.. Página 57 de 65. Libnet.

(58) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 5.1 Diagrama de clases HexaConverter (from java_GUI). GUI editorPacketes. byteArrayToHexString() hexStringToByteArray(). (from java_GUI) numPack : int editorPacketes() initComponents() costruirIpActionPerformed() enviarIpActionPerformed() salirIpActionPerformed() salirActionPerformed() jButton1ActionPerformed() nRawActionPerformed() protocoloEthActionPerformed() mac8ActionPerformed() arbolPaquetesMousePressed() mac1ActionPerformed() jMenu3ActionPerformed() enviarButtonActionPerformed() nuevoPacketeActionPerformed() exitForm() main(). Esta clase permite la entada a la libreria FachadaEditor (from Fachada) FachadaEditor() getNumFragments() buildEthPacket() -miFachada buildDatagram() buildSegementTCP() buildSegementUDP() buildIcmpEcho() buildIcmpMask() buildIcmpRedirect() buildRawFrame() miFachada IniciarLibnet() getDeviceList() getDeviceName() destroy() send() getFragmentsShort() isInicied() getShort(). JTextFieldLimit (from java_GUI) limit : int toUppercase : boolean = false JTextFieldLimit() JTextFieldLimit() insertString(). -Arbol ArbolAdapter (from java_GUI) ArbolAdapter() ConstruirNuevoPaquete() ConstruirDatagrama() ConstruirSegmentoUDP() ConstruirSegmentoTCP() ConstruirICMP() refrescar() AdcicionarFragmento() EliminarPaquete(). Fachada que provee la entrada a libnet. Figure 5-2 Diagrama de clases de la aplicación. 5.2 Diagrama de secuencias. Los diagramas siguientes son la representación de cómo construir y colocar sobre la red segmentos TCP, UDP y un mensaje ICMP.. Por: Carlos Iván Poveda R.. Página 58 de 65.

(59) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Enviar ICMP ECHO editorPacket es 1: IniciarLibnet(device : Logical View::java::lang::String, tipo : int) : void. FachadaEdit or. 2: buildIcmpEcho(type : byte, code : byte, sum : short, id : short, seq : short, payload : byte[], payload_s : int) : void. 3: buildDatagram(len : short, tos : byte, id : short, frag : short, ttl : byte, prot : byte, sum : short, src). 4: buildEthPacket(src : byte[], dst : byte[], type : int, payload : byte[], payload_s : int) : void. 5: send() : void. 6: destroy() : void Es necesario destruir la libreria para poder volver a utlizarla. Figure 5-3 Diagrama de secuencia para envío de ICMP echo. Por: Carlos Iván Poveda R.. Página 59 de 65.

(60) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Enviar udp editorPackete s. 1: y = isInicied() : boolean. No se puede inicializar. FachadaEdit or. 2: y = true. 3: IniciarLibnet(device : Logical View::java::lang::String, tipo : int) : void. 4: buildSegementUDP(sp : short, dp : short, len : short, sum : short, payload : byte[], payload_s : int) : void. 5: buildDatagram(len : short, tos : byte, id : short, frag : short, ttl : byte, prot : byte, sum : short, src). 6: buildEthPacket(src : byte[], dst : byte[], type : int, payload : byte[], payload_s : int) : void Es necesario destruir la libreria 7: send() : void para poder volver a utlizarla 8: destroy() : void. Figure 5-4 Diagrama de secuencia para envío de ICMP echo. Por: Carlos Iván Poveda R.. Página 60 de 65.

(61) EDITOR DIDÁCTICO DE TRAMAS TCP/IP Enviar tcp editorPacket es 1: IniciarLibnet(device : Logical View::java::lang::String, tipo : int) : void. 2: buildSegementTCP() : void 3: buildDatagram(len : short, tos : byte, id : short, frag : short, ttl : byte, prot : byte, sum : short, src). 4: buildEthPacket(src : byte[], dst : byte[], type : int, payload : byte[], payload_s : int) : void. 5: send() : void. 6: destroy() : void Es necesario destruir la libreria para poder volver a utlizarla. Figure 5-4 Diagrama de secuencia enviar TCP. Por: Carlos Iván Poveda R.. Página 61 de 65. FachadaEdit or.

(62) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 6 IMPLANTACIÓN Y EXPERIENCIAS. El desarrollo de la herramienta propuesta permitió y permitirá ahondar en el conocimiento de las comunicaciones en redes TCP/IP con el máximo detalle, de tal forma que en la medida que se profundice en la consolidación de esta herramienta se abrirán interesantes oportunidades para crear nuevos servicios sobre este tipo de redes. En su desarrollo se pusieron de manifiesto las siguientes dos grandes dificultades que hubo en proceso de desarrollo del proyecto: •. La evidente y lógica falta de experiencia del estudiante que trata de llevar a un ejercicio práctico los conocimientos adquiridos durante la academia, especialmente en la aplicación efectiva de los códigos de las librerías y el manejo de apuntadores en C.. •. Muy escasa documentación de buena calidad que especificara claramente los parámetros de las funciones de las diferentes librerías, para lo cual fue necesario ampliar las referencias bibliográficas.. Por: Carlos Iván Poveda R.. Página 62 de 65.

(63) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 7 MANUAL. Un objetivo de la herramienta desarrollada es la sencillez de su uso que permita al usuario independizarse de la misma y concentrarse en la comprensión de las estructuras de los diferentes tipos de frames de TCP/IP. Esta sencillez se ve materializada en el Manual del Usuario que se desarrolla a continuación: Construcción de un Frame: 1- En Archivo -> Nuevo esto creara un nuevo nodo en el árbol como se muestra a continuación.. Por: Carlos Iván Poveda R.. Página 63 de 65.

(64) EDITOR DIDÁCTICO DE TRAMAS TCP/IP 2- Iniciar la edición del Frame: En el caso de que escoja IP y haga click sobre construir le aparecerá la siguiente pantalla. Seleccione el nodo creado anteriormente:. Zona de ingreso del contenido. Direccion Mac Fuente y destino. Arbol de ingreso de frames. Por: Carlos Iván Poveda R.. Envia la el frame que el usuario a creado hasta el momento. Crea los campos incluidos por el usuario la interfaz y en el caso que el protocolo encapsulado sea soportdo este creara un nuevo nodo en el arbol. Página 64 de 65.

(65) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Campos del Protocolo Ip. Haga el mismo procedimiento en caso de que el protocolo este soportado por el sistema. Envío de paquete Raw:. Seleccione Archivo nuevo paquete raw:. Por: Carlos Iván Poveda R.. Página 65 de 65.

(66) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. Escriba acá los datos que desea transmitir. Escriba el contenido ye envíelo.. Por: Carlos Iván Poveda R.. Página 66 de 65.

(67) EDITOR DIDÁCTICO DE TRAMAS TCP/IP. 8 PROYECCION HACIA FUTUROS TRABAJOS. El estado actual de la herramienta que alcanza la generación y colocación de datagramas sobre la red presenta oportunidades altamente interesantes para continuar y profundizar su desarrollo hacia la generación de módulos que habiliten: •. Desarrollo de soporte para el envío de mas protocolos como son: ipv6, ARP,RARP y ntp etc.. •. Manejo de archivos con la información de paquetes que permitan hacer scripts.. •. Comunicación entre las aplicaciones. Es decir, que se puede enviar información entre cada una de las aplicaciones.. Por: Carlos Iván Poveda R.. Página 67 de 65.

Referencias

Documento similar