|
|
|
|
127
|
|
127
|
|
128
|
1. Estudia el archivo `ethernet_hdr.h`. Este archivo contiene la siguiente definición de la estructura de datos que representa un encabezado de Ethernet:
|
128
|
1. Estudia el archivo `ethernet_hdr.h`. Este archivo contiene la siguiente definición de la estructura de datos que representa un encabezado de Ethernet:
|
129
|
|
129
|
|
130
|
- #define ETHER_ADDR_LEN 6
|
|
|
|
|
130
|
+ #define ETHER_ADDR_LEN 6
|
131
|
|
131
|
|
132
|
- struct sniff_ethernet {
|
|
|
133
|
- u_char ether_dhost[ETHER_ADDR_LEN]; /* direccion destino */
|
|
|
134
|
- u_char ether_shost[ETHER_ADDR_LEN]; /* direccion fuente */
|
|
|
135
|
- u_short ether_type; /* IP? ARP? RARP? etc */
|
|
|
136
|
- };
|
|
|
|
|
132
|
+ struct sniff_ethernet {
|
|
|
133
|
+ u_char ether_dhost[ETHER_ADDR_LEN]; /* direccion destino */
|
|
|
134
|
+ u_char ether_shost[ETHER_ADDR_LEN]; /* direccion fuente */
|
|
|
135
|
+ u_short ether_type; /* IP? ARP? RARP? etc */
|
|
|
136
|
+ };
|
137
|
|
137
|
|
138
|
- 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.
|
|
|
|
|
138
|
+ 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
|
|
139
|
|
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.
|
|
|
|
|
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.
|
141
|
|
141
|
|
142
|
2. El siguiente código es la definición de la clase `ethernet_packet`, que se encuentra en el archivo `ethernet_packet.h`:
|
142
|
2. El siguiente código es la definición de la clase `ethernet_packet`, que se encuentra en el archivo `ethernet_packet.h`:
|
143
|
|
143
|
|
144
|
- class ethernet_packet
|
|
|
145
|
- {
|
|
|
146
|
- sniff_ethernet ethernet ;
|
|
|
|
|
144
|
+ class ethernet_packet
|
|
|
145
|
+ {
|
|
|
146
|
+ sniff_ethernet ethernet ;
|
147
|
|
147
|
|
148
|
- // Devuelve una direccion de 6 bytes MAC en una cadena de caracteres.
|
|
|
149
|
- string mac2string(u_char []) ;
|
|
|
|
|
148
|
+ // Devuelve una direccion de 6 bytes MAC en una cadena de caracteres.
|
|
|
149
|
+ string mac2string(u_char []) ;
|
150
|
|
150
|
|
151
|
- public:
|
|
|
152
|
- ethernet_packet(); // Constructor por defecto
|
|
|
|
|
151
|
+ public:
|
|
|
152
|
+ ethernet_packet(); // Constructor por defecto
|
153
|
|
153
|
|
154
|
- // Ajusta la variable miembro ether_dhost a los valores
|
|
|
155
|
- // recibidos en el arreglo
|
|
|
156
|
- void setEtherDHost(u_char []) ;
|
|
|
|
|
154
|
+ // Ajusta la variable miembro ether_dhost a los valores
|
|
|
155
|
+ // recibidos en el arreglo
|
|
|
156
|
+ void setEtherDHost(u_char []) ;
|
157
|
|
157
|
|
158
|
- // Ajusta la variable miembro ether_shost a los valores
|
|
|
159
|
- // recibidos en el arreglo
|
|
|
160
|
- void setEtherSHost(u_char []) ;
|
|
|
|
|
158
|
+ // Ajusta la variable miembro ether_shost a los valores
|
|
|
159
|
+ // recibidos en el arreglo
|
|
|
160
|
+ void setEtherSHost(u_char []) ;
|
161
|
|
161
|
|
162
|
- // Ajusta el ethernet type al valor recibido.
|
|
|
163
|
- void setEtherType(u_short) ;
|
|
|
|
|
162
|
+ // Ajusta el ethernet type al valor recibido.
|
|
|
163
|
+ void setEtherType(u_short) ;
|
164
|
|
164
|
|
165
|
- // Devuelve la representación en cadenas de caracteres de las direcciones
|
|
|
166
|
- // Ethernet
|
|
|
167
|
- string getEtherDHost() ;
|
|
|
168
|
- string getEtherSHost() ;
|
|
|
|
|
165
|
+ // Devuelve la representación en cadenas de caracteres de las direcciones
|
|
|
166
|
+ // Ethernet
|
|
|
167
|
+ string getEtherDHost() ;
|
|
|
168
|
+ string getEtherSHost() ;
|
169
|
|
169
|
|
170
|
- // Devuelve el tipo de ethernet.
|
|
|
171
|
- u_short getEtherType() ;
|
|
|
172
|
- };
|
|
|
|
|
170
|
+ // Devuelve el tipo de ethernet.
|
|
|
171
|
+ u_short getEtherType() ;
|
|
|
172
|
+ };
|
173
|
|
173
|
|
174
|
Nota que cada objeto de clase `ethernet_packet` solo tiene el siguiente atributo: una estructura tipo `sniff_ethernet` llamada `ethernet`.
|
174
|
Nota que cada objeto de clase `ethernet_packet` solo tiene el siguiente atributo: una estructura tipo `sniff_ethernet` llamada `ethernet`.
|
175
|
|
175
|
|