Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analizador de Protocolos
Analizador de Protocolos
REDES DE COMPUTADORAS
“ANALIZADOR DE TRAMAS”
By:
Professor:
M. en C. NIDIA ASUNCIÓN CORTEZ DUARTE
JUNIO 2016
Índex
Contenido
Problem:......................................................................................................................2
Hypothesis:..................................................................................................................2
Procedure:................................................................................................................2-8
Results (Data):........................................................................................................8-12
Conclusions:..............................................................................................................12
References:..............................................................................................................30
Code....................................................................................................................12-30
2
Problema:
Realizar un analizador de tramas, que identifique cada uno de los protocolos
vistos en clase y imprima la información necesaria de cada cabecera.
Hipotesis:
La programación será usada con base en el anterior programa que fue el
analizador LLC, analizando correctamente cada capa de la trama como vimos
en clase, únicamente editando cada cabecera para sacar correctamente la
información de la trama .
Procedimiento:
Protocolo IP
CABECERA
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3
31
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
Differentiated
Version IHL Total length
Services
Identification Flags Fragment offset
TTL Protocol Header checksum
Source IP address
Destination IP address
Options and padding :::
T[14]>>4&15
1
T[14]&15)*4
T[18]*256+T[19]
Calculamos el Offset:
T[20]&31*256+T[21]
switch(T[23]){
Valor Protocolo
1 ICMP
6 TCP
17 UDP
Otros No soportado
Imprimimos el Checksum:
T[24]*256+T[25]
for(i=26;i<29;i++)
printf("%i:",T[i]);
printf("%i\n",T[29]);
for(i=30;i<33;i++)
printf("%i:",T[i]);
printf("%i\n",T[33]);
2
if(tope>34)
while(i<=tope){
printf("%x ",T[i]);
i++;
Protocolo IP-ICMP
CABECERA
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Data :::
if(T[23]==1)
switch(T[i])
3
16 Information reply. Obsolete. RFC 792
17 Address mask request. RFC 950
18 Address mask reply. RFC 950
19 reserved (for security).
20 reserved (for robustness experiment).
-
29
30 Traceroute. RFC 1393
31 Conversion error. RFC 1475
32 Mobile Host Redirect.
33 IPv6 Where-Are-You.
34 IPv6 I-Am-Here.
35 Mobile Registration Request.
36 Mobile Registration Reply.
37 Domain Name request. RFC 1788
38 Domain Name reply. RFC 1788
39 SKIP Algorithm Discovery Protocol.
40 Photuris, Security failures. RFC 2521
41 Experimental mobility protocols. RFC 4065
42 Reserved.
-
255
4
CABECERA
.::Protocolo envio::.
01 000101 0001 10 00
0
Dir.Orig Dir. Tipo Enrutamie
en Desti tram nto
no a
T[13] T[13]-T[14] T[14]
Protocolo IP-TCP
CABECERA
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Sequence Number
Acknowledgment Number
Data reserv
ECN Control Bits Window
Offset ed
Data :::
5
T[24]+T[25]
T[26]+T[29]
Protocolo IP-UDP
CABECERA
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Length Checksum
Data :::
En el caso de que no entre en ninguno de los otros 2 casos entonces será una
trama de tipo UDP entonces solamente imprimimos el puerto origen, el destino
la longitud de la tramam y el checksum:
6
Protocolo ARP
CABECERA
ARP header:
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Data :::
Primero checamos si los bits 12 y 13 sean igual a 2054, de ser asi entra al
protocolo ARP y imprimimos el tipo de dirección de hardware:
if((T[12]<<8)+(T[13])==2054)
TH[((T[14])+T[15])])
if(((T[16]>>3)+T[17])==2048)
if(((T[18]))==6)
if(((T[19]))==4)
7
Luego imprimimos la operación que se está realizando, la dirección de
Hardware origen, la dirección de protocolo origen, la dirección de hardware
destino y la dirección de protocolo destino:
Operación OP[T[20]+T[21]]
Direccion HO T[22],T[23],T[24],T[25],T[26],T[27]
Direccion PO T[28],T[29],T[30],T[31]
Direccion HD T[32],T[33],T[34],T[35],T[36],T[37]
Direccion PD T[38],T[39],T[40],T[41]
Capturas de pantalla:
8
9
10
11
Concluciones:
Codigo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
12
int main(){
/* TRAMA 1 */
0x39, 0xfe /* 9. */
},
/*TRAMA 2 */
},
/* TRAMA 3 */
13
0x80, 0x42, 0x04, 0x55, 0x34, 0x11, 0x80, 0x11, /* .B.U4... */
},
/* TRAMA 4 */
},
/* TRAMA 5 */
14
0x8b, 0x46, 0xe9, 0xad, 0x94, 0xcc, 0x39, 0xcb, /* .F....9. */
0x3a, 0xe1 /* :. */
},
/* TRAMA 6*/
},
/* TRAMA 7 */
15
0x02, 0x6d, 0x78, 0x00, 0x00, 0x1c, 0x00, 0x01, /* .mx..... */
},
/* TRAMA 8 */
},
/* TRAMA 9 */
16
0x98, 0x25, 0x94, 0xcc, 0x39, 0xcb, 0x94, 0xcc, /* .%..9... */
0x68, 0x69 /* hi */
},
/* TRAMA 10 */
},
/* trama 11 */
0x63, /*control*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
17
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
},
/* trama 12 */
0x68, 0x69 /* hi */
},
/* trama 13 */
18
0x00, 0x00, 0x00, 0x00, 0x43, 0x05, 0x90, 0x6d /* ....C..m */
},
/* trama 14 */
},
/* trama 15*/
19
},
/* trama 16 */
},
/*trama 17 */
},
/* trama 18 */
20
0x66, 0x7f, 0xd4, 0x3c, 0x08, 0x00, 0x45, 0x00, /* f..<..E. */
},
/*trama 19 */
},
/* trama 20 */
21
0x01, 0x02, 0x00, 0x15, 0x04, 0x03, 0x21, 0x5d, /* ......!] */
}};
for(i=0;i<20;i++){
strcpy(cadena,"");
if(analizartrama(trama[i],cadena))
printf("%s\n", cadena);
return 0;
int i=0;
".::Capa fisica::.";
22
printf("MAC destino: ");
for(i=0;i<=5;i++)
printf("%.2x:",T[i]);
for(i=6;i<=11;i++)
printf("%.2x:",T[i]);
printf("\n");
if((T[12]<<8)+(T[13])==2054){
printf("ARP:\n");
if(((T[16]>>3)+T[17])==2048)
if(((T[18]))==6)
if(((T[19]))==4)
printf("Operacion: %s\n",OP[T[20]+T[21]]);
return 1;
23
else
if(((T[12]<<8)+(T[13]))==2048){//Protocolo IP
printf("\n.::Protocolo IP::.\n");
printf("Version: %i\n",T[14]>>4&15);
printf("Servicios:\n");
if(T[15]&16)
printf("\tMinimize delay\n");
if(T[15]&8)
printf("\tMaximize througthout\n");
if(T[15]&4)
printf("\tMaximize reliability\n");
if(T[15]&2)
printf("\tMinimize cost\n");
printf("Total: %i\n",T[16]);
printf("Identification: %i\n",(T[18]*256+T[19]));
printf("banderas: ");
if(T[20]&64)
printf("Sin fragmentar\n");
else if(T[20]&32)
printf("Mas de un fragmento\n");
else printf("\n");
printf("Offset: %i\n",(T[20]&31)*256+T[21]);
printf("TTL: %i\n",T[22]);
printf("Protocolo: ");
24
switch(T[23]){
case 1: printf("ICMP\n");
break;
case 6: printf("TCP\n");
break;
case 17:printf("UDP\n");
break;
default:printf("No soportado\n");
break;
for(i=26;i<29;i++)
printf("%i:",T[i]);
printf("%i\n",T[29]);
for(i=30;i<33;i++)
printf("%i:",T[i]);
printf("%i\n",T[33]);
i=34;
printf("Opciones: ");
while(i<=tope){
printf("%x ",T[i]);
i++;
25
printf("\n");
printf("\n.::Cabecera ICMP::.\n");
switch(T[i]){
break;
switch(T[i+1]){
break;
break;
break;
break;
break;
break;
break;
26
break;
break;
break;
break;
break;
break;
break;
break;
break;
switch(T[i+1]){
break;
break;
27
break;
break;
break;
break;
break;
break;
switch(T[i+1]){
break;
break;
break;
switch(T[i+1]){
break;
break;
28
break;
break;
break;
break;
break;
break;
break;
break;
case 30:printf("Traceroute\n");
break;
}//Termina ICMP
printf("protocolo TCP\n");
i++;
29
printf("Puerto origen %d\n",(T[24]+T[25]));
printf("checksum : %d \n",T[40]+T[41]);
printf("Options: %d\n",opcitcp[T[44]]);
else if(T[23==17]){
printf("protocolo udp\n");
i++;
}//Termina IP
return -1;
Referencias:
http://www.networksorcery.com/enp/protocol/802/ethertypes.htm
http://www.comunidad.escom.ipn.mx/ealdana/redesnp/tcp_ip/tcpip%5b1%5d.pdf
30
31