Selaa lähdekoodia

README-es.md edited on August 2, 2016 at 10:22am

Jose R Ortiz Ubarri 8 vuotta sitten
vanhempi
commit
ade0ebb57e
1 muutettua tiedostoa jossa 27 lisäystä ja 21 poistoa
  1. 27
    21
      README-es.md

+ 27
- 21
README-es.md Näytä tiedosto

@@ -2,13 +2,14 @@
2 2
 
3 3
 ![header.png](images/header.png)  
4 4
 
5
-[Verano 2016 - Ive]
5
+[Verano 2016 - Ive - Coralys]
6 6
 
7
-La *programación orientada a objetos* (object oriented programming, OOP) es un paradigma de programación que promueve el diseño de programas en el que distintos objetos interactúan entre sí para resolver un problema.   C++ es uno de los lenguajes de programación que promueve la programación orientada a objetos, permitiendo que los programadores creen sus propias clases desde cero o derivadas de otras clases existentes. Algunos otros lenguajes que promueven OOP son Java, Python, javascript y PHP.   
7
+La *programación orientada a objetos* (object oriented programming - OOP) es un paradigma de programación que promueve el diseño de programas en el que distintos objetos interactúan entre sí para resolver un problema.  C++ es uno de los lenguajes de programación que promueve la programación orientada a objetos, permitiendo que los programadores creen sus propias clases desde cero o derivadas de otras clases existentes. Otros lenguajes que promueven OOP son Java, Python, JavaScript y PHP.   
8 8
 
9
-En OOP, cada objeto encapsula dentro de él ciertas propiedades sobre el ente que está modelando (por ejemplo, un objeto que modela un *punto* encapsula dentro de sí las coordenadas *x* y *y* del punto que representa). Además, cada objeto permite realizar ciertas acciones sobre sí, i.e. contiene sus *métodos*. Por ejemplo, un objeto de clase *punto* puede realizar la acción de cambiar el valor de su coordenada *x*.
9
+En OOP, cada objeto encapsula dentro de él ciertas propiedades sobre el ente que está modelando. Por ejemplo, un objeto que modela un *punto* encapsula dentro de sí las coordenadas *x* y *y* del punto que representa. Además, cada objeto permite realizar ciertas acciones sobre sí, i.e. contiene sus *métodos*. Por ejemplo, un objeto de la clase *punto* puede realizar la acción de cambiar el valor de su coordenada *x*.
10
+
11
+Cuando la clase de objetos que necesitamos utilizar en nuestro programa no ha sido predefinida en el alguna librería, necesitamos declarar e implementar nuestra propia clase. Para esto, definimos *clases* que contengan datos con ciertas *propiedades* o *atributos*, y acciones que queremos hacer con esos datos por medio de *métodos* o *funciones miembro*. De esta manera, podremos organizar la información y los procesos en *objetos* que tienen las propiedades y métodos de una clase. En la experiencia de laboratorio de hoy, practicarás el definir una clase e implementar algunos de sus métodos, completando el analizador de redes (*sniffer*) simple. El sniffer captura todos los paquetes de protocolo de internet (IP) que fluyen a través de tu computadora en el laboratorio, y alguna información adicional de los paquetes.
10 12
 
11
-Cuando la clase de objetos que necesitamos utilizar en nuestro programa no ha sido predefinida en el alguna librería, necesitamos declarar e implementar nuestra propia clase. Para esto definimos *clases* que contengan datos con ciertas *propiedades* o *atributos* y acciones que queremos hacer con esos datos por medio de *métodos* o *funciones miembro*. De esta manera, podremos organizar la información y procesos en *objetos* que tienen las propiedades y métodos de una clase. En la experiencia de laboratorio de hoy practicarás el definir una clase e implementar algunos de sus métodos completando analizador de redes (*sniffer*) simple. El sniffer captura todos los paquetes de protocolo de internet (IP) que fluyen a través de tu computadora en el laboratorio, y alguna información adicional de los paquetes.
12 13
 
13 14
 ## Objetivos:
14 15
 
@@ -21,12 +22,11 @@ Cuando la clase de objetos que necesitamos utilizar en nuestro programa no ha si
21 22
 
22 23
 Antes de llegar al laboratorio debes haber:
23 24
 
24
-
25 25
 1. Repasado la declaración e implementación de clases en C++.
26 26
 
27 27
 2. Estudiado los conceptos e instrucciones para la sesión de laboratorio.
28 28
 
29
-3. Tomado el quiz Pre-Lab que se encuentra en Moodle.
29
+3. Tomado el quiz Pre-Lab, disponible en Moodle.
30 30
 
31 31
 
32 32
 ---
@@ -36,13 +36,13 @@ Antes de llegar al laboratorio debes haber:
36 36
 
37 37
 ## Comunicación entre computadoras
38 38
 
39
-Las computadoras se comunican por medio del Internet utilizando el *Protocolo de Internet* (IP, por sus siglas en inglés). Cuando una computadora envía información (o mensaje) a otra computadora, la información se envía por *Paquetes de Internet* que contienen la *dirección fuente* ("source address"), que es la dirección de Internet de la computadora que está enviando la información, y la *dirección del destino* ("destination address"), que es dirección de Internet de la computadora que debe recibir el mensaje. Las direcciones de Internet se usan para guiar la información de una computadora a otra, pero, una vez el paquete llega a su destino, ?quién se supone que reciba la información? ?Cuál aplicación debe recibir la información?
39
+Las computadoras se comunican por medio del Internet utilizando el *Protocolo de Internet* (IP - por sus siglas en inglés). Cuando una computadora envía información a otra computadora, la información se envía por *Paquetes de Internet* que contienen la *dirección fuente* ("source address"), que es la dirección de Internet de la computadora que está enviando la información, y la *dirección destino* ("destination address"), que es la dirección de Internet de la computadora que debe recibir el mensaje. Las direcciones de Internet se usan para guiar la información de una computadora a otra, pero una vez el paquete llega a su destino, ¿quién se supone que reciba la información? ¿Cuál aplicación debe recibir la información?
40 40
 
41
-Los paquetes de internet también deben especificar la aplicación que envía la información y la aplicación que debe recibirla. Podemos pensar que las direcciones de Internet son las direcciones de correo de una casa, y que las aplicaciones que envían y reciben la información son las personas que envían y reciben la correspondencia. Para enviar una carta por correo, hay que especificar a qué persona se le está enviando la carta. Esto corresponde a especificar la aplicación que recibe la información. Para identificar la aplicación fuente y la aplicación del destino, el protocolo de Internet usa lo que se conoce como *números de puerto*. De este modo, mirando la información del paquete, se puede identificar las direcciones y puertos de la fuente y del destino.
41
+Los paquetes de internet también deben especificar la aplicación que envía la información y la aplicación que debe recibirla. Podemos pensar que las direcciones de Internet son las direcciones de correo de una casa, y que las aplicaciones que envían y reciben la información, son las personas que envían y reciben la correspondencia. Para enviar una carta por correo, hay que especificar a qué persona se le está enviando la carta. Esto corresponde a especificar la aplicación que recibe la información. Para identificar la aplicación fuente y la aplicación del destino, el protocolo de Internet usa lo que se conoce como *números de puerto*. De este modo, mirando la información del paquete, se pueden identificar las direcciones y puertos de la fuente y del destino.
42 42
 
43
-Por ejemplo, cuando la computadora que usas en un laboratorio se comunica con el servidor donde se encuentra el programa  Moodle, los paquetes que llevan la información de tu computadora al servidor contienen la dirección de la fuente, que es la computadora del laboratorio, y la dirección del destinatario, que es el servidor de Moodle. El puerto fuente es el de tu buscador web y el puerto destinatario es el del servidor de Moodle.
43
+Por ejemplo, cuando la computadora que usas en un laboratorio se comunica con el servidor donde se encuentra el programa Moodle, los paquetes que llevan la información de tu computadora al servidor contienen la dirección de la fuente, que es la computadora del laboratorio, y la dirección del destinatario, que es el servidor de Moodle. El puerto fuente es el de tu buscador web y el puerto destinatario es el del servidor de Moodle.
44 44
 
45
-Las direcciones de internet ocupan 4 bytes (32 bits) y usualmente se presentan al usuario como cadenas de 4 valores decimales. Cada valor decimal entre 0 y 255 es la representación decimal  de uno de los 4 bytes:
45
+Las direcciones de internet ocupan 4 bytes (32 bits) y usualmente se presentan al usuario como cadenas de 4 valores decimales. Cada valor decimal entre 0 y 255 es la representación decimal de uno de los 4 bytes:
46 46
  "(0-255).(0-255).(0-255).(0-255)". Algunos ejemplos de direcciones de IP son:
47 47
  `10.0.1.10`, `192.168.10.11`, `136.145.54.10`.
48 48
 
@@ -54,7 +54,7 @@ Para complicar las cosas un poco, cada tarjeta de red de computadoras tiene un i
54 54
 
55 55
 ## Analizador de redes simple
56 56
 
57
-Un *sniffer* de paquetes (también conocido como analizador de paquetes, analizador de protocolos, o analizador de redes) es un programa de computadora que puede interceptar y registrar el tráfico que pasa a través de una red digital, o dispositivo de red.  Mientras los datos fluyen a través de la red, el sniffer captura cada paquete, y si es necesario lo descifra para obtener los datos crudos del paquete [1].
57
+Un *sniffer* de paquetes (también conocido como analizador de paquetes, analizador de protocolos, o analizador de redes) es un programa de computadora que puede interceptar y registrar el tráfico que pasa a través de una red digital, o dispositivo de red.  Mientras los datos fluyen a través de la red, el sniffer captura cada paquete, y si es necesario, lo descifra para obtener los datos crudos del paquete [1].
58 58
 
59 59
 Cada paquete capturado por un sniffer tiene una estructura como la que ilustra la Figura 1.
60 60
 
@@ -83,7 +83,7 @@ Dentro del "payload", el paquete de IP contiene varios campos, entre ellos:
83 83
 2. Los números de **puerto fuente y destino**
84 84
 3. El **payload** del paquete IP. Dentro de este payload estarían los datos que se desean comunicar de una computadora a otra.
85 85
 
86
-En esta experiencia de laboratorio completarás un sniffer de paquetes sencillo que captura todos los paquetes de IP que fluyen a través de tu computadora de laboratorio, y alguna información adicional de los paquetes.  Adicionalmente detecta las solicitudes no encriptadas de imágenes en la web, y despliega las imágenes en el GUI.
86
+En esta experiencia de laboratorio completarás un sniffer de paquetes sencillo que captura todos los paquetes de IP que fluyen a través de tu computadora de laboratorio, y alguna información adicional de los paquetes.  Adicionalmente, detecta las solicitudes no encriptadas de imágenes en la web, y despliega las imágenes en el GUI.
87 87
 
88 88
 ---
89 89
 
@@ -93,7 +93,7 @@ En esta experiencia de laboratorio completarás un sniffer de paquetes sencillo
93 93
 ## Sesión de laboratorio:
94 94
 
95 95
 
96
-La aplicación que completarás hoy permite a los usuarios analizar el tráfico de red y monitorear las imágenes que están siendo transferidas a través de tu red.
96
+La aplicación que completarás hoy, permite a los usuarios analizar el tráfico de red y monitorear las imágenes que están siendo transferidas a través de tu red.
97 97
 
98 98
 
99 99
 La Figura 2 muestra una foto de la interfaz de la aplicación. Cada fila en la tabla es la información de un paquete capturado. La caja de texto bajo la tabla presenta un resumen del paquete seleccionado en la tabla. La lista en el lado derecho presenta las imágenes que han sido capturadas por el sniffer.
@@ -108,20 +108,26 @@ La Figura 2 muestra una foto de la interfaz de la aplicación. Cada fila en la t
108 108
 ---
109 109
 
110 110
 
111
-Para crear un sniffer de paquetes puedes usar la librería de *pcap* que provee una interfaz para accesar la data que está pasando a través de la tarjeta de red de tu computadora.  Esta librería contiene una función que devuelve un torrente crudo de los bytes de cada paquete capturado.
111
+Para crear un sniffer de paquetes puedes usar la librería de *pcap* que provee una interfaz para accesar la data que está pasando a través de la tarjeta de red de tu computadora. Esta librería contiene una función que devuelve un torrente crudo de los bytes de cada paquete capturado.
112
+
113
+La tarea del programador del sniffer es decodificar el torrente en crudo a información legible por humanos.  Afortunadamente esta no va a ser tu tarea, pero tu puedes aprender a hacerlo, si quieres, leyendo el código fuente de este laboratorio.  Tu tarea es seguir los ejercicios de abajo para que puedas proveerle al sniffer los objetos necesarios (clases) para procesar los paquetes.
112 114
 
113
-La tarea del programador del sniffer es decodificar el torrente en crudo a información legible por humanos.  Afortunadamente esta no va a ser tu tarea, pero tu puedes aprender a hacerlo, si quieres, leyendo el código fuente de este laboratorio.  Tu tarea es seguir los ejercicios de abajo para que puedas proveerle al sniffer los objetos necesarios (Clases) para procesar los paquetes.
114 115
 
115 116
 ### Ejercicio 1 - Familiarizarte con la aplicación
116 117
 
117 118
 #### Instrucciones
118 119
 
119
-1. Carga a `QtCreator` el proyecto `SimpleSniffer`. Hay dos maneras de hacer esto:
120
+1. Para cargar este proyecto, necesitas correr QtCreator con privilegios de administrador (root). 
121
+
122
+`sudo qtcreator Documents/eip/classes-simplesniffer/SimpleSniffer.pro` 
123
+    
124
+2. Carga a `QtCreator` el proyecto `SimpleSniffer`. Hay dos maneras de hacer esto:
120 125
 
121 126
     * Utilizando la máquina virtual: Haz doble “click” en el archivo `SimpleSniffer.pro` que se encuentra  en el directorio `/home/eip/labs/classes-simplesniffer` de la máquina virtual.
122 127
     * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/classes-simplesniffer` para descargar la carpeta `classes-simplesniffer` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `SimpleSniffer.pro`.
123 128
 
124
-2. Configura el proyecto.  El proyecto consiste de varios archivos.  En esta experiencia de laboratorio trabajarás con los archivos `ethernet_hdr.h`, `ethernet_packet.h`, `ethernet_packet.cpp`, `ip_packet.h` y `ip_packet.cpp`.
129
+3. Configura el proyecto. En esta experiencia de laboratorio trabajarás con los archivos `ethernet_hdr.h`, `ethernet_packet.h`, `ethernet_packet.cpp`, `ip_packet.h` y `ip_packet.cpp`.
130
+
125 131
 
126 132
 ### Ejercicio 2 - Completar la clase `ethernet_packet`
127 133
 
@@ -137,7 +143,7 @@ La tarea del programador del sniffer es decodificar el torrente en crudo a infor
137 143
 
138 144
      El encabezado de Ethernet de arriba es usado para decodificar la parte Ethernet de los datos crudos en cada paquete.  Este se compone de la dirección MAC fuente (`ether_shost`, 6 bytes), la dirección MAC destino (`ether_dhost`, 6 bytes), y el tipo de paquete de Ethernet (`ether_type`, 2 bytes) que es usado para determinar si el paquete es un paquete de IP.
139 145
 
140
-     Como sabes, no es una buena idea enseñar este formato de información a un usuario regular.  Tu primer tarea es definir los métodos de la clase de C++ que traducen la información de las direcciones MAC a cadenas de caracteres legibles por humanos.
146
+     Como sabes, no es una buena idea enseñar este formato de información a un usuario regular.  Tu primera tarea es definir los métodos de la clase de C++ que traducen la información de las direcciones MAC a cadenas de caracteres legibles por humanos.
141 147
 
142 148
 2. El siguiente código es la definición de la clase `ethernet_packet`, que se encuentra en el archivo `ethernet_packet.h`:
143 149
 
@@ -182,13 +188,13 @@ La tarea del programador del sniffer es decodificar el torrente en crudo a infor
182 188
      * `getEtherType()` es un *getter*  que devuelve el valor de `ether_type` como *unsigned char*.
183 189
      * el método privado `string mac2string(u_char [])` recibe un arreglo de seis *unsigned characters* y devuelve el string correspondiente a su representación hexadecimal. Por ejemplo, si recibe `{ 0x8A, 0x11, 0xAB, 0xFF, 0x12, 0x34}` debe devolver el string `"8A:11:AB:FF:12:34"`.
184 190
 
185
-4. Tu tarea en este ejercicio es implementar las siete funciones listadas arriba en el archivo `ethetnet_packet.cpp`. Los encabezados de algunas de la funciones están provistos en el archivo.
191
+4. Tu tarea en este ejercicio es implementar las siete funciones listadas arriba, en el archivo `ethetnet_packet.cpp`. Los encabezados de algunas de las funciones están provistos en el archivo.
186 192
 
187 193
 ### Ejercicio 3 - Construir la declaración de `ip_packet`
188 194
 
189 195
 1. Estudia las definiciones de las funciones de la clase `ip_packet` que se encuentra en el archivo `ip_packet.cpp`
190 196
 
191
-2. Tu tarea es crear la *declaración* de la clase `ip_packet` en el archivo `ip_packet.h` tomando como  base  los métodos que aparecen en el archivo `ip_packet.cpp`.  Los atributos de la clase `ip_packet` deben ser:
197
+2. Tu tarea es crear la *declaración* de la clase `ip_packet` en el archivo `ip_packet.h` tomando como  base  los métodos que aparecen en el archivo `ip_packet.cpp`. Los atributos de la clase `ip_packet` deben ser:
192 198
 
193 199
        * dos objetos de clase `string` para almacenar las direcciones de IP fuente y destino
194 200
        * una variable de un byte (`char`) para almacenar el tipo de protocolo IP
@@ -203,7 +209,7 @@ La tarea del programador del sniffer es decodificar el torrente en crudo a infor
203 209
 
204 210
 ## Entregas
205 211
 
206
-Utiliza "Entrega" en Moodle para entregar los archivos `ethernet_packet.cpp` y `ip_packet.h` que completaste. Recuerda utilizar buenas prácticas de programación, incluir el nombre de los programadores y documentar tu programa.
212
+Utiliza "Entrega" en Moodle para entregar los archivos `ethernet_packet.cpp` y `ip_packet.h` que completaste. Recuerda utilizar buenas prácticas de programación, al incluir el nombre de los programadores y documentar tu programa.
207 213
 
208 214
 ---
209 215