You are on page 1of 14
Manipulacion avanzada de paquetes TCP/IP con Scapy - Parte | Piri <= Fst PLLC tole) ‘ Ho Deo in hack Ee hackxcrack <= crack Manipulacion avanzada de paquetes TCP/IP con Scapy - Parte | En este articulo voy a introducirlos en el manejo de paquetes TCP/IP con una herramienta llamada Scapy. Como primer practica vamos a realizar el hijacking 0 "robo" de una sesién TCP/IP ya establecida. 1 Introducci6n Toda la Internet esté basada en el continuo intercambio de paquetes entre los distintos nodes de la red, con el objetivo de establecer comunicaciones. Al nivel mas primitivo, estos paquetes son una serie de pulsos digitales bien definidos que viajan en cables de cobre alrededor del mundo. Ademas, la arquitectura de Internet es tal que todos estamos conectados con todos, con el objetivo de maximizar la eficiencia a la hora establecer comunicaciones Es evidente que una red en la que hay que establecer nuevas conexiones fisicas cada vez que se quiera utilizar algin servicio va a ser muchisimo mas lenta que una red en la que esté todo conectado de antemano. Para evitar que la red sea un completo caos, nace el concepto de conexién virtual que permite que una comunicacién entre dos nodos no sea escuchada por otras personas ajenas a la conversacién. En otras palabras, con el protocolo TCP/IP de por medio, se puede aislar una conversacién entre dos nodos de la red evitando que terceras personas _ilegitimas participen en la conversacién. Pero como en este mundo nada funciona como deberia, trabajando en un nivel adecuado se pueden modificar paquetes correspondientes a una conversacién ajena y hasta inyectar datos maliciosos en dicha conversacién. En este articulo se cubren técnicas que involucran la construccién y manipulacién de paquetes para “controlar" la red y alterar su normal funcionamiento. Para eso, vamos a introducir una herramienta muy poderosa llamada Scapy. Antes de empezar, voy a listar los conocimientos basicos que deberia tener un posible lector, 1. Conocimiento sobre el protocolo TCP y UDP: Basicamente, este articulo se trata de la manipulacién de paquetes TCP/IP 0 UDP/IP para llevar a cabo un determinado objetivo. Por lo tanto, es esencial que el lector conozca los lineamientos basicos de estos protocolos de comunicacién. De todas formas, a modo de repaso se explican la mayoria de los conceptos utilizados. 2. Programacién en general: Como veremos, i 1 tran Peary ras kx hack wohoc Scapy est basado en el intérprete de Python y a lo largo del articulo se presentan algunos conceptos relacionados con dicho lenguaje Ademas vamos a utilizar conceptos de programacién como variables, enteros, cadenas de texto, etc. No se requieren conocimientos previos de Python, sin embargo supongo que cuando estés tan emocionado con el tema como lo estoy yo, querrés aprender inmediatamente. Personalmente, lo que mas me gusta de Python es que puedes escribir cualquier cosa que crees que deberia funcionar y FUNCIONA. Finalmente, para motivarlos a que lean el articulo, enumero las cosas que podrian hacer usando Scapy: 1. Creary manipular facilmente paquetes TCP/IP. 2. Reproducir en muy pocas lineas con un grado de dificultad muy bajo, herramientas como traceroute, tcptraceroute, arpspoof, dnsspoof, algun escaner de puertos, etc. El objetivo de esto no es “reinventar la pélvora” sino comprender a fondo el funcionamiento de dichas aplicaciones, que muchos de nosotros en algin momento las utilizamos como “cajas negras” y personalizarlas para llevar a cabo tareas muy particulares. 3. Crear graficos 2D y 3D de traceroutes. 4, Reproducir en muy pocas lineas un snnifer y modificar paquetes TCP/IP en tiempo real 5. Scapy es una herramienta muy facil de usar que puede ayudar a una persona a comprender a fondo el protocolo TCP/IP y otros protocolos a nivel de aplicacién, 6. Infinitas cosas més, limitadas sélo por la imaginacién y el grado de conocimiento del usuario crack Para descargar Scapy, en la pagina web http//www.secdev.org/projects/scapy hay bastante informacién sobre la instalacién de la version més reciente. En la mayoria de los sistema operativos basados en Debian, simplemente basta hacer “sudo apt-get install scapy’. La herramienta esté pensada para entornos de tipo Unix, pero también se la puede instalar en Windows. 2 (Porqué crear paquet: personalizados? Un paquete es una unidad de informacién bien ordenada que se encuentra agrupada con una determinada estructura (son unos y ceros que tienen algtin “significado"). En cierta forma, comparte los atributos de una carta que se envia por correo postal. Contiene informacion sobre el origen y el destino del paquete, la prioridad del paquete, la ruta que debe seguir para llegar a su destino y, por supuesto, el contenido que debe ser entregado al destinatario. En resumen, un paquete (independientemente del protocol utilizado) contiene los datos necesarios para que pueda ser transmitido correctamente y el "payload", que es el contenido que debe ser entregado. Toda esta informacién es procesada por _funciones automatizadas que se adhieren a estrictas reglas que son conocidas ptblicamente. Aqui es donde la creacién de paquetes personalizados juega un rol importante: no importa donde ni como se generé un paquete, si este se adhiere a las normas preestablecidas, una maquina lo va a procesar si recibe lo que estaba esperando. Para visualizar esto, veamos dos ejemplos que ademés nos van a ayudar a familizarizarnos con Scapy y con su linea de comandos interactiva 1 tran Peary 2.1 Creacién de un paquete UDP El escenario en este simple ejemplo se muestra en la figura 1. Hay dos maquinas, una con IP 192.168.0100 (maquina A) y otra con IP 192.168.0.106 (maquina B) que tiene el puerto 1024 UDP abierto y a la escucha (LISTENING) con el netcat (con la opcién “-u" , que indica modo upp). Por lo tanto, la maquina 192.168.0.106 esté esperando un paquete UDP por el puerto 1024. A continuacién, vamos a armar un paquete UDP arbritario en la maquina A con Scapy y se lo mandamos a la maquina B. En la figura 2 se muestran los comandos ejecutados que a continuacién pasamos a explicar. Basicamente, en Scapy se contruye un paquete por capas. Es decir, por un lado construimos la capa IP con los pardmetros que deseamos (direccién IP de destino y de origen, Time to Live, Protocolo, etc) y por otro lado construimos la capa UDP con los puertos de destino y origen y la capa de aplicacién donde esta el “payload” o los datos que queremos enviar. También se puede personalizar la capa Ethernet si se desea trabajar a niveles bajos. Una vez que tenemos todas las capas armadas, las “juntamos” con el operador "/” armando el paquete final a ser enviado. Finalmente, enviamos el paquete con el comando send() y automaticamente se completan todos los campos que no modificamos con valores por defecto del sistema operativo 0 que dependen del paquete (el checksum, por ejemplo). Bastante simple, gno?. A continuacién vamos a explicar los comandos que se muestran en la figura 2: >Is(IP()): Este comando lista todos los campos de la clase IP() que pueden ser personalizados. El comando Is(IP()) nos muestra cuatros columnas la primera el nombre de cada campo, la segunda el tipo de dato de cada campo, la tercera los valores por defecto al iniciar Scapy y la tiltima son los valores actuales de cada uno de los atributos (como no modificamos nada todavia, son iguales a los de la tercera columna). >capa_IP=IP(dst="192.168.0.106"): Este comando hace dos cosas y voy a tratar de explicarlas sin usar un lenguaje especifico de Python, Primero establece un valor de 192.168.0.106 al campo dst de la clase IP(). Segundo “iguala” la “variable” capa_IP a la clase IP() con este valor modificado. Es decir, ahora capa_IP tiene las mismas propiedades que la clase IPQ) (IP de origen, IP de destino, TTL, etc) pero con el campo dst igual a 192.168.0.106, que evidentemente representa la IP de destino Por ejemplo, si ahora ejecutamos el comando Is(capa_IP), obtendremos una salida parecida al item anterior, sélo que en la cuarta columna en la fila correspondiente el campo dst aparece la IP que seteamos nosotros. >capa_IP: Este comando muestra en pantalla los campos que fueron modificados por el usuario (distintos a los que vienen por default). >Is(UDP(): Este comando atributos de la clase UDP. lista los distintos >capa_UDP=UDP(dport=1024 , sport=5025): Este comando modifica los valores por defecto de la clase UDP y “setea” los puertos de origen y destino al 5025 y 1024 respectivamente. El puerto 1024 es en el que esté escuchando la maquina 192.168.0.106 y el puerto de origen 5025 es un ntimero cualquiera de 16 bits. >capa_UDP: De vuelta, se muestra en pantalla los campos que fueron modificados por el usuario (distintos a los que vienen por default). >payload="Mandamos un paquete UDP =)\n": u Cente ro ay) Perma Pc Pc : IP = 192.168.0.106 = 192.168.0.10 Late) Puerto UDP 1024 ABIERTO MAQUINA B MAQUINA A 5 worn nachierackes it Paar hack ¥4 Aca simplemente inicializamos una variable de tipo “string” que representa el payload que va adjunto al paquete UDP/IP. En otras palabras, representa la capa de aplicacién donde se incluyen los comandos que deberfa entender la aplicacién que esta escuchando en el puerto upp. >paquete=capa_IP/capa_UDP/payload: Finalmente juntamos las tres capas utilizando el operador */" y asi armamos un paquete que tiene toda la informacién que ingresamos anteriormente. Si hacemos Is(paquete) se imprime en pantalla los valores de los campos de cada capa del paquete. >send(paquete): Una vez armado el paquete, lo enviamos con el comando send). Los campos que no completamos en la capa IP y UDP (checksum, versin, protocolo de la capa anterior, longitud, etc) se_—“llenan” autométicamente con valores que pueden depender del paquete o del sistema operativo Ademés, en ningtin momento modificamos ni armamos una capa Ethernet pero igual el paquete se pudo enviar correctamente a la maquina 192.168.0.106 (como puede verse a la derecha de la figura 2). Esto se debe a que la funcién send() trabaja en la capa 3 (capa IP). Si quieren personalizar la capa de enlance hay que usar la funcién sendp(), que trabaja en la capa 2. Como vemos, Scapy es una aplicacién muy versatil_y facil de utilizar. A continuacién, complicamos un poco més el escenario para demostrar el alcance de esta poderosa herramienta. 2.2 Inyeccién de paquetes UDP en una conversacién externa En este nuevo escenario, que se muestra en la figura 3 hay tres maquinas en una red interna: la maquina A con IP 192.168.0.100, la maquina B hackxecrack é er. ack con IP 192.168.0.106 con el puerto UDP 1024 a la escucha y la maquina C con IP 192.168.0.107 que intercambia paquetes UDP con la B utilizando el puerto 49392 de origen. Ademas, la maquina C envié un paquete UDP a la maquina B con un payload que contiene la cadena: “HOLA 106, soy 107” Como se muestra en la figura 3, la maquina A de alguna forma comprometié el segmento de red entre B y Cy tiene conocimiento de todos los detalles de la conversacién UDP que se esta llevando a cabo. Es decir, sabe que la IP 192.168.0.107 envia paquetes UDP del puerto 49392 al puerto 1024 de la maquina con IP 192.168.0.106 (esto se puede lograr mediante la técnica de ARPSpoofing, la cual explicaremos mas adelante) En resumen, el atacante en la maquina A sabe QU Figura 3.Escenario simple donde la maquina B intercambia paquetes UDP con la maquina C. El atacante, en la maquina A, logra comprometer el segmento de red entre B y C e inyecta paquetes ilegitimos en la conversacién *“UDP''. emery que la maquina B va a recibir y procesar correctamente paquetes UDP que provengan de la IP 192.168.0.107 con puerto de origen 49392, independientemente de como y donde se creen. Los tinicos cuatro parémetros que definen univocamente la conversacién entre B y Cson: 1, IP de la maquina B: 192.168.0.106 2. 1P de la maquina C: 192.168.0.107 3. Puerto UDP de la maquina B: 1024 4. Puerto UDP de la maquina C: 49392 Con algtin objetivo malicioso, el atacante en la maquina A busca suplantar la identidad de la maquina C inyectando paquetes ilegitimos en la conversacién. Para eso, lleva a cabo una sesién interactiva en Scapy que se muestra en la figura 4, @ inyecta un paquete UDP que tiene como payload la cadena “HOLA 106, soy 100 pero me estoy haciendo pasar por 107\n". A continuacién, pasamos a detallar los comandos ejecutados para realizar dicha accién: }92.168.0.107", dst="192.168.0.106"): De forma andloga al caso anterior, establecemos la IP de origen del paquete como la 192.168.0.107 (maquina C, que es la que el atacante quiere suplantar) y la IP de destino como 192.168.0.106 (maquina B). >capa_IP: Imprimimos en pantalla los cambios que realizamos sobre los valores por defecto. >capa_UDP=UDP(sport=49392, dport=1024): Configuramos los puertos de origen y destino del paquete. \ ioe Carey >capa_UDP: De vuelta, imprimimos los cambios realizados para controlar que todo esté bien. >payload="HOLA 106, soy 100 pero me estoy haciendo pasar por 107\n": Inicializamos una cadena de caracteres que se utilizaré como payload del paquete UDP. >paquete=capa_IP/capa_UDP/payload: Finalmente armamos el paquete que vamos a enviar. >paquete: Verificamos el paquete por ultima vez, para aseguramos de que todos los pardmetros “seteados" sean correctos. >str(paquete): Realiza una “diseccién” del paquete y lo imprime en pantalla como una serie de caracteres hexadecimales. >send(paquete): Enviamos el paquete y, como se puede observar en la consola superior derecha de la figura 4, Ilegé a la maquina B El escenario anterior muestra con que facilidad podemos suplantar la identidad de un host en una “conversacién” de tipo UDP. Aunque el ejemplo anterior parezca un poco tonto y carente de sentido no esta muy lejos de ser, por ejemplo, una respuesta DNS de un servidor de nombres de dominio a un determinado cliente. EI caso anterior generalmente se da cuando se intercambian datos utilizando un protocolo no orientado a conexién (UDP). En ese caso, la capa de transporte no tiene implementado ni un mecanismo que identifique el flujo de informacién y que evite que terceros “inyecten” paquetes deliberadamente en la conversacién (aunque se podria implementar uno en la capa de aplicacién, como el caso del protocolo DNS). AUN: 3 Hijacking de una sesién TCP/IP Complicamos atin mas el escenario anterior. En vista de lo que sucedié anteriormente en la conversacién UDP, las maquinas B y C deciden que es mas conveniente intercambiar los paquetes mediante una conexién TCP. Como sabemos, el protocolo TCP es orientado a conexién e implementa un mecanismo en la capa de transporte para el control del flujo de informacién y la creacién de un par de circuitos virtuales (cada uno en una direccién). Esto permite que sdlo los dos sistemas finales sinctonizados puedan usar la conexién (en este caso, By C). Las conexiones TCP se componen de tres etapas: establecimiento. de —_conexidn, transferencia de datos y fin de la conexién. Para establecer la conexién se usa el procedimiento llamado negociacién en tres pasos (3-way handshake) y para la desconexién se utiliza una negociacién en cuatro pasos (4-way handshake). Durante el establecimiento de la conexién, algunos parametros como el nimero de secuencia (SEQ) son configurados para asegurar la entrega ordenada de los datos y la robustez de la comunicaci6n. El escenario de este ejemplo es similar al anterior y se muestra en la figura 5. Hay una maquina B con IP 192.168.0.106 con el puerto TCP 5678 abierto y una maquina C con IP 192.168.0 107 que utiliza el puerto 35434 de origen para establecer una conexién TCP con la maquina B. El atacante en la maquina A con IP 192.168.0.100 comprometié el segmento de red entre B y C utilizando la conocida (y poco sigilosa) técnica de ARPSpoofing, ejecutando los comandos que se muestran en la figura 5. El principio del ARPSpoofing es enviar mensajes ARP falsos (falsificados, 0 spoofed) a la Ethernet. La finalidad de esta técnica es asociar la Carey Shier (Wiresharl) a <_ Atacante MAQUINA A IP = 192.168.0.106 a <¢ > IP = 192.168.0.107 Puerto TCP 5678 ABIERTO Puerto TCP de origen 35434 MAQUINA B MAQUINA C. PC PC MAQUINA B YANN MAQUINA ( RESUMEN de la conversacion (resumida del sniffer) 3-Way Handshake IP 192.168.0.107 ———> sys IP 192.168.0.107 <@—— SYN/ACK, Seo OAONTH, Ack 67207209 fn IP 192.168.0.106 TP 192.168.0.107 ——— ACK Sort 2 —B IP 192.168.0.106 ‘Transferencia de datos IP 192.168.0.107 ————_Psty/ac sy? BP 192.168.0.106, IP 192.168.0.107 €——— Ack, Soo-traar2m, Ack-ssmwarty TP 192.168.0.106 TP 192.168.0.107 <@——— SHACK, HOLA Ws 106° ac N77, Ack TP 192.168.0.106 IP 192.168.0107 ———3> _PsH/Ack, Bie > IP 192.168.0.106 IP 192.168.0.107 ACK, Ss -sin7H, Ack <— PP 192.168.0.106 Figura 5. Escenario donde un atacante A (IP 192.168.0.100) se dispone al robo de una sesién TCP/IP entre los hosts B y C. ——> PP 192.168.0.106 Ako 9 worn nachierackes emery direccién MAC del atacante con la direccién IP de otro nodo (el nodo atacado). En este caso particular, el atacante hace creer a B que la IP 192.168.0.107 tiene asociada su MAC y a la maquina C que la IP 192.168.0.106 también tiene asociada su MAC. En conclusién, todos los paquetes que intercambian B y C pasan fisicamente por la maquina A. El escenario completo se muestra en la figura 5, donde se observa que el atacante fue capaz de captar el trafico intercambiado entre B y C (que también se muestra en dicha figura), y obtener todos los ntimeros de secuencia y de acuse de recibo de la conversacién. De vuelta, con algtin objetivo malicioso, el atacante en la maquina A busca suplantar la identidad de la maquina C inyectando paquetes ilegitimos en la conversacién. Para eso, lleva a cabo la sesién interactiva en Scapy que se muestra en la figura 6. Este caso es un poco mas complicado que el anterior (UDP) pero no muy dificil de llevar a cabo. Simplemente hay que armar un paquete PSH/ACK con los nlimeros de secuencia y de acuse de recibo que espera la maquina B e inyectarlo de forma anéloga al caso de UDP. Como el atacante pudo captar la conversacién entre By C sabe que ntimeros de SEQ y ACK debe tener el paquete y se dispone a armarlo en Scapy, usando los siguientes comandos (que se muestran en la figura 6): >capa_IP=IP(src="192.168.0.107", dst="192.168.0.106"): De forma andloga a los casos anteriores, establecemos la IP de origen del paquete como la 192.168.0.107 (maquina C) MAQUINA A MAQUINA B MAQUINA G \ ioe Carey y la IP de destino como 192.168.0.106 (maquina B). >capa_IP: Imprimimos en pantalla los cambios que realizamos sobre los valores por defecto. >capa_TCP=TCP(sport=35434, dport=5678): Al igual que en el caso de un paquete UDP, configuramos los puertos de origen y destino del paquete. >Is(capa_TCP): Imprimimos en pantala los campos de la clase capa_TCP que podemos modificar (que obviamente son todos los de la capa TCP). En particular, observamos que hay dos campos que hacen referencia al ntimero de secuencia y de acuse de recibo: seq y ack, respectivamente. >capa_TCP.seq=672267354: Este comando modifica el campo seq de la clase capa_TCP con el valor que nosotros queramos, que en este caso es el = 672267354. Si observan detalladamente [a figura 5, el ultimo paquete que la maquina B envié a la maquina C es un paquete ACK, con numero de secuencia igual a 680033760 y numero de acuse de recibo 672267354. Por lo tanto, el préximo paquete PSH/ACK que espera la maquina B de la maquina C debe tener un niimero de secuencia igual a 672267354 y un numero de acuse de recibo igual a 680033760 (“intercambiamos" los numeros). >capa_TCP.ack=680033760: Este comando modifica el campo ack de la clase capa_TCP con el valor que nosotros queramos, que en este caso es el 680033760. >capa_TCP: Este comando imprime en pantalla los valores de los campos que modificamos. >capa_TCP-flags='PA': Con este comando se indica que el paquete debe tener los flags PSH y ACK levantados. >payload="HOLA 106, soy 100 pero me estoy haciendo pasar por 107\n": Inicializamos una cadena de caracteres que se utilizaré. como payload del paquete UDP. >paquete=capa_IP/capa_TCP/payload ‘Armamos el paquete que vamos a enviar. >paquete: Verificamos el paquete por tltima vez, pata asegurarnos de que todos los parémetros “seteados” sean correctos. >send(paquete): Enviamos el paquete y, como se puede observar en la consola superior derecha de la figura 6, llegé a la maquina B. Como vemos, el atacante fue capaz de suplantar la identidad de la maquina C en la conexién TCP que ya estaba establecida. Es mas, si la IP del atacante (192.168.0.100) fuera una IP NO AUTORIZADA a comunicarse con B, éste método igual hubiera funcionado, ya que suplantamos la IP del cliente legitimo (IP Spoofing). La pregunta es, qué pasa con la sesién legitima iniciada en la maquina C? Qué pasa si el cliente en la maquina C desea enviar algun dato a la maquina B? La respuesta es que no pasa absolutamente nada. Sus ntimeros de secuencia y acuse de recibo van a estar totalmente “desfasados" en la conexién y la maquina B (que se adhiere estrictamente al protocolo TCP) va a rechazar cada uno de los paquetes que envie C. El atacante ahora desea deshacerse del cliente en la maquina C, para lo cual lleva a cabo la sesion en Scapy que se muestra en la figura 7. Basicamente, arma un paquete TCP con el flag “RESET” para suplantar a la maquina B y enviarselo a la maquina C. Como el atacante tiene conocimiento de los nuimeros SEQ y ACK que espera la maquina C de la maquina B, lo puede armar convenientemente adhiriéndose al 11 12 MAQUINA A protocolo TCP (los ntimeros SEQ y ACK se muestran en la figura 5). Como se puede ver en la figura 8, la sesin de netcat en la maquina C se cierra autométicamente luego de que A envia el paquete RESET. La explicacién de los comandos utilizados es andloga al caso anterior, con la tinica diferencia de que ahora el campo flags de la clase capa_TCP es 'R’. Con respecto al numero de secuencia utilizado, antes de que la maquina A inyectara el paquete ilegitimo en la conversacién, el ultimo paquete que la maquina B envié a la maquina C es un paquete ACK, con numero de secuencia igual a 680033760. Por lo tanto, este debe ser el ntimero de secuencia del paquete RESET que tiene que crear el atacante. MAQUINA B Una vez que el atacante dejé fuera del escenario a la maquina C, puede llevar a cabo un ataque de denegacién de servicio y dejar de redireccionar los paquetes de C a la maquina B (pero sin dejar de hacer ARPSpoofing). Esto se puede lograr simplemente haciendo “echo 0 > /proc/sys/net/ipv4/ip_forward”. Una técnica un poco més sutil seria usar IPTABLES para evitar que la maquina C vuelva a establecer una conexién con el puerto 5678 de la maquina B. De cualquier forma, si la maquina C lograra establecer nuevamente una conexién con B, no pasaria nada con la sesién robada por la maquina A ya que C utilizaria otro puerto de origen y otros ntimeros de secuencia. Lo que si es esencial tener en cuenta es que, una vez robada la sesién, el atacante A debe dejar de Carey gehen RSURMIE Figura 8 MAQUINA € EL atacante en la méquina A logra suplantar la identidad de la maquina C continuando la conversacién TCP con la maquina B redireccionar los paquetes de la maquina B a la C En caso contrario, seguirian llegando paquetes a C de una conexién que ya fue cerrada lo cual es SOSPECHOSO y también provocaria una réfaga de paquetes RESET de la maquina C a la B, que podrian causar que el atacante pierda la conexién robada. Finalmente, en la figura 8 se muestra una sesién de Scapy donde el atacante continua la “conversacién” con la maquina B suplantando la identidad de la maquina C. Para concluir, notamos que todo lo expuesto en este articulo tiene solamente un_ interés académico. Los parémetros y las variables a controlar en un proceso de hijacking de una sesion TCP/IP son muchos y hacen que sea imposible aplicarlo en una situacién real (sesiones HTTP, FTP, POP3, SMTP, etc) de una forma tan rustica como lo hicimos nosotros. Es evidente que hay que “automatizar” las distintas tareas y coordinar adecuadamente__el ARPSpoofing, el monitoreo del tréfico y la inyeccién de paquetes. Afortunadamente, la aplicacién Scapy junto con el entorno de programacién de Python hacen posible la construccién de una herramienta practica de hijacking, Scapy puede trabajar en la capa de enlace realizando ARPSpoofing, puede monitorear los paquetes que pasan a través de nuestra maquina y obtener los nimeros de secuencia y de acuse de recibo para “colarse” en una conexién TCP/IP de terceros. Todas esas tareas concurrentes se pueden “administrar” correctamente usando la programacién de ( i c Carey www.ohaockxerack.es threadings en Python. Para no alargar mas este articulo, dejamos todos esos temas para otra ocasién. 4Conclusién La conclusién (bastante obvia) que podemos obtener de esta practica es que las computadoras son ESTUPIDAS. Nosotros somo seres INTELIGENTES y podemos aprovecharnos de ellas. Nunca perdamos de vista que los nodos de una red se comunican con “unos” y “ceros” que viajan a través del “ciberespacio” en estructuras bien definidas (y _conocidas ptiblicamente) llamadas PAQUETES. Una computadora va a procesar los “unos” y “ceros” que reciba si tienen algtin sentido, independientemente de donde se armaron y de como llegaron. Por lo tanto, si una computadora recibe un paquete que estaba esperando, lo va a tratar correctamente acatando las normas o reglas con las cuales fue programada 14 worn nackxcract.et

You might also like