<div>Hi for all</div>
<div>&nbsp;</div>
<div>When i add this line&nbsp;to my code</div>
<div>&nbsp;</div>
<div>pcap_stats_ex(descriptor,estadisticas);</div>
<div>&nbsp;</div>
<div>it crashed :(</div>
<div>&nbsp;</div>
<div>
<p>#ifndef WIN32<br>&nbsp;#include &lt;sys/socket.h&gt;<br>&nbsp;#include &lt;netinet/in.h&gt;<br>#else<br>&nbsp;#include &lt;winsock.h&gt;<br>#endif</p>
<p>#include &lt;stdlib.h&gt;<br>#include &lt;time.h&gt;<br>#include &lt;math.h&gt;<br>#include &quot;pcap.h&quot;</p>
<p>&nbsp;</p>
<p>/* Convierte una dirección IPv4 numérica a cadena*/<br>char *iptos(u_long in)<br>{<br>&nbsp;static char output[12][3*4+3+1];<br>&nbsp;static int res;<br>&nbsp;u_char *p;</p>
<p>&nbsp;p = (u_char *)&amp;in;<br>&nbsp;res = (res + 1 == 12 ? 0 : res + 1);<br>&nbsp;sprintf(output[res], &quot;%d.%d.%d.%d&quot;, p[0], p[1], p[2], p[3]);<br>&nbsp;return output[res];<br>}</p>
<p><br>#ifndef __MINGW32__ /* Cygnus no soporta IPv6 */<br>/* Convierte una dirección IPv6 numérica a cadena*/</p>
<p>char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)<br>{<br>&nbsp;socklen_t sockaddrlen;</p>
<p>&nbsp;#ifdef WIN32<br>&nbsp;sockaddrlen = sizeof(struct sockaddr_in6);<br>&nbsp;#else<br>&nbsp;sockaddrlen = sizeof(struct sockaddr_storage);<br>&nbsp;#endif</p>
<p>&nbsp;if(getnameinfo(sockaddr,sockaddrlen,address,addrlen,NULL,0,&nbsp;NI_NUMERICHOST)!= 0)<br>&nbsp;&nbsp;&nbsp;&nbsp; address = NULL;</p>
<p>&nbsp;return address;<br>}<br>#endif /* __MINGW32__ */</p>
<p><br>/* Imprime la informacion disponible de una interfaz dada */</p>
<p>void describe(pcap_if_t *d, int n)<br>{<br>&nbsp; pcap_addr_t *a;<br>&nbsp; char ip6str[128];</p>
<p>&nbsp; printf(&quot;%d. %s\n&quot;,n,d-&gt;name);</p>
<p>&nbsp; if (d-&gt;description)<br>&nbsp;&nbsp; printf(&quot;\tDescripcion: %s\n&quot;,d-&gt;description);&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>&nbsp; else<br>&nbsp;&nbsp; printf(&quot;\tDescripcion no disponible\n&quot;);<br>&nbsp; <br>&nbsp; printf(&quot;\tLoopback: %s\n&quot;,(d-&gt;flags &amp; PCAP_IF_LOOPBACK)? &quot;Si&quot;:&quot;No&quot;); /* Loopback Address*/
<br>&nbsp; <br>&nbsp; for(a=d-&gt;addresses;a;a=a-&gt;next)&nbsp;&nbsp;&nbsp;&nbsp; /* direcciones IP */<br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; printf(&quot;\tFamilia de direcciones: #%d\n&quot;,a-&gt;addr-&gt;sa_family);<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; switch(a-&gt;addr-&gt;sa_family)<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case AF_INET:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\tNombre de la familia de direcciones : AF_INET\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;addr) printf(&quot;\tDireccion: %s\n&quot;,iptos(((struct sockaddr_in *)a-&gt;addr)-&gt;sin_addr.s_addr));
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;netmask)printf(&quot;\tMascara de Subred: %s\n&quot;,iptos(((struct sockaddr_in *)a-&gt;netmask)-&gt;sin_addr.s_addr));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;broadaddr) printf(&quot;\tDireccion de Broadcast: %s\n&quot;,iptos(((struct sockaddr_in *)a-&gt;broadaddr)-&gt;sin_addr.s_addr));
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;dstaddr) printf(&quot;\tDireccion de Destino: %s\n&quot;,iptos(((struct sockaddr_in *)a-&gt;dstaddr)-&gt;sin_addr.s_addr));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp; case AF_INET6:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\tNombre de la familia de direcciones : AF_INET6\n&quot;);&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ifndef __MINGW32__ /* Cygnus no soporta IPv6 */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;addr) printf(&quot;\tDireccion: %s\n&quot;, ip6tos(a-&gt;addr, ip6str, sizeof(ip6str)));
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endif<br>&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp; default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\tNombre desconocido de la familia de direcciones\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp; <br>&nbsp; printf(&quot;\n&quot;);<br>}</p>
<p><br>/* Funciones principales */</p>
<p>int id_nic,cantidad_paquetes;<br>pcap_if_t *nics,*d;<br>struct pcap_stat *estadisticas;<br>char buffer_error[PCAP_ERRBUF_SIZE];<br>double retardo[65536];</p>
<p>void reconoce_nics_y_elige_una()<br>{<br>&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; system(&quot;cls&quot;);</p>
<p>&nbsp;&nbsp;&nbsp; /* Captura la lista de NICs */<br>&nbsp;if(pcap_findalldevs(&amp;nics, buffer_error) == -1)<br>&nbsp;{<br>&nbsp;&nbsp;printf(&quot;Error en la captura de NICs: %s\n&quot;, buffer_error);<br>&nbsp;&nbsp;exit(1);<br>&nbsp;}</p>
<p>&nbsp;printf(&quot;\nLas NICs encontradas son:\n\n&quot;);</p>
<p>&nbsp;for(i=0,d=nics; d; d=d-&gt;next,++i) /* Imprime la información de las NICs detectadas*/<br>&nbsp; describe(d,i+1);</p>
<p>&nbsp;if(i==0)<br>&nbsp;{<br>&nbsp;&nbsp;puts(&quot;\nNo se encontraron NICs! Verifica que Winpcap este instalado...&quot;);<br>&nbsp;&nbsp;exit(1);<br>&nbsp;}</p>
<p>&nbsp;while(1)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;\nIngrese el numero de interface de la cual desea capturar los paquetes (1-%d): &quot;,i);<br>&nbsp;&nbsp; scanf(&quot;%d&quot;, &amp;id_nic);</p>
<p>&nbsp;&nbsp; if(id_nic &lt; 1 || id_nic &gt; i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts(&quot;El numero de interface esta fuera del rango.&quot;);</p>
<p>&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><br>void captura_y_almacena_paquetes()<br>{<br>&nbsp;&nbsp;&nbsp; struct pcap_pkthdr *cabecera;<br>&nbsp;&nbsp;&nbsp; struct tm *tiempo_cabecera,*tiempo;<br>&nbsp;&nbsp;&nbsp; struct bpf_program codigo_filtro;<br>&nbsp;&nbsp;&nbsp; const u_char *paquete;<br>&nbsp;&nbsp;&nbsp; pcap_t *descriptor;
<br>&nbsp;&nbsp;&nbsp; u_int mascara_de_red;<br>&nbsp;&nbsp;&nbsp; char timestr[16],filtro[20]=&quot;ip&quot;,nombre[30]=&quot;paquetes.txt&quot;;<br>&nbsp;&nbsp;&nbsp; int i,num_paquete,res;<br>&nbsp;&nbsp;&nbsp; int *puntero;<br>&nbsp;&nbsp;&nbsp; FILE *buffer;</p>
<p>&nbsp;&nbsp;&nbsp; for(d=nics, i=0; i&lt; id_nic-1 ;d=d-&gt;next, i++); /* Ubico la NIC deseada */</p>
<p>&nbsp;/* Abro el dispositivo de red y su adaptador*/<br>&nbsp;<br>&nbsp;if ((descriptor= pcap_open_live(d-&gt;name,&nbsp;/* nombre de la NIC */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65536,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* garantiza que capturo el paquete completo*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* modo promiscuo (un valor diferente de cero) */
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* timeout */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer_error&nbsp;&nbsp;/* almacena los posibles errores */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) == NULL)<br>&nbsp;{<br>&nbsp;&nbsp;printf(&quot;\nNo se puede abrir el adaptador porque %s no es soportado por WinPcap\n&quot;, d-&gt;name);
<br>&nbsp;&nbsp;pcap_freealldevs(nics); /* Libero la lista de NICs */<br>&nbsp;&nbsp;exit(1);<br>&nbsp;}<br>&nbsp;<br>&nbsp;mascara_de_red=((struct sockaddr_in *)(d-&gt;addresses-&gt;netmask))-&gt;sin_addr.S_un.S_addr;</p>
<p>&nbsp;&nbsp;&nbsp; /* Compilo el filtro */<br>&nbsp;&nbsp;&nbsp; if (pcap_compile(descriptor,&amp;codigo_filtro,filtro,1,mascara_de_red) &lt;0 )<br>&nbsp;{<br>&nbsp;&nbsp;printf(&quot;\nNo se puede compilar el filtro.\n&quot;);<br>&nbsp;&nbsp;pcap_freealldevs(nics);&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;exit(1);<br>&nbsp;}</p>
<p>&nbsp;/* Aplico el filtro */<br>&nbsp;if (pcap_setfilter(descriptor,&amp;codigo_filtro)&lt;0)<br>&nbsp;{<br>&nbsp;&nbsp;printf(&quot;\nError aplicando el filtro.\n&quot;);<br>&nbsp;&nbsp;pcap_freealldevs(nics);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;exit(1);<br>&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; printf(&quot;Ingrese el numero maximo de paquetes a capturar: &quot;);
<br>&nbsp;scanf(&quot;%d&quot;,&amp;cantidad_paquetes);<br>&nbsp;system(&quot;pause&quot;);<br>&nbsp;&nbsp;&nbsp; system(&quot;cls&quot;);<br>&nbsp;&nbsp;&nbsp; printf(&quot;\nCapturando paquetes de %s...\n\n&quot;, d-&gt;description);</p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; buffer=fopen(nombre,&quot;w&quot;);&nbsp;&nbsp; /* Abro el buffer de almacenamiento de los paquetes */<br>&nbsp;&nbsp;&nbsp; pcap_freealldevs(nics);&nbsp;&nbsp;&nbsp;&nbsp; /* Libero la lista de NICs porque ya no la necesito */</p>
<p>&nbsp;&nbsp;&nbsp; for(num_paquete=1;num_paquete&lt;=cantidad_paquetes &amp;&amp; (res = pcap_next_ex(descriptor, &amp;cabecera, &amp;paquete)) &gt;= 0;++num_paquete)<br>&nbsp;{<br>&nbsp;&nbsp;if(res == 0) /* Pasó timeout */<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp; /*fprintf(buffer,&quot;Pasando de la zona de Kernel a la de usuario...\n\n&quot;);*/
<br>&nbsp;&nbsp;&nbsp; --num_paquete; /* No incrementa la cuenta si no se ha capturado algun paquete */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEBO HALLAR EL TIEMPO CON PRECISIÓN DE MILISEGUNDOS */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retardo[num_paquete]=(num_paquete*239)%129;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;/*
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* convierte el timestamp a un formato entendible */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tiempo_cabecera=localtime(&amp;cabecera-&gt;ts.tv_sec);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strftime( timestr, sizeof timestr, &quot;%H:%M:%S&quot;, tiempo_cabecera);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Imprimo el número de paquete y su marca de tiempo*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(buffer,&quot;%d %s.%.6d\n&quot;,num_paquete,timestr,cabecera-&gt;ts.tv_usec);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*Se imprime el timestamp con precision de microsegundos*/
<br>/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(buffer,&quot;Paquete #%d capturado a las %s.%.6d de %d bytes de longitud \n\n&quot;, num_paquete, timestr, cabecera-&gt;ts.tv_usec, cabecera-&gt;len);*/</p>
<p>&nbsp;&nbsp;for (i=1; i &lt;= cabecera-&gt;caplen ; i++) /*Imprimo el paquete*/<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;fprintf(buffer,&quot;%02X &quot;, paquete[i-1]);<br>&nbsp;&nbsp;&nbsp;if ( (i &amp; 15) == 0) fprintf(buffer,&quot;\n&quot;);<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;fprintf(buffer,&quot;100\n\n\n&quot;); /* el 100 sirve como delimitador de paquete */<br>&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp; puts(&quot;al menos llegas&quot;);<br>&nbsp;&nbsp;&nbsp; pcap_stats_ex(descriptor,estadisticas);<br>&nbsp;&nbsp;&nbsp; puts(&quot;y aca?&quot;);<br>&nbsp;&nbsp;&nbsp; pcap_close(descriptor);<br>&nbsp;&nbsp;&nbsp; fclose(buffer);<br>}</p>
<p><br>void interpreta_paquetes()<br>{<br>&nbsp;&nbsp;&nbsp; char entrada[30]=&quot;paquetes.txt&quot;,salida[30]=&quot;resultados.txt&quot;;<br>&nbsp;&nbsp;&nbsp; FILE *buffer,*res;<br>&nbsp;&nbsp;&nbsp; char tiempo[50],c,temp[50];<br>&nbsp;&nbsp;&nbsp; int flag=0,num_paquete,aux,i,byte[65536];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* variables auxiliares */
<br>&nbsp;&nbsp;&nbsp; int proto,ldatos,lip,servicio,lpaquete,lcabecera;&nbsp; /* caracteristicas del paquete */</p>
<p>&nbsp;&nbsp;&nbsp; buffer=fopen(entrada,&quot;r&quot;);<br>&nbsp;&nbsp;&nbsp; res=fopen(salida,&quot;w&quot;);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; while(fscanf(buffer,&quot;%d %s\n&quot;,&amp;num_paquete,tiempo)==2)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* lectura del paquete almacenado en el buffer */
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;fscanf(buffer,&quot;%X&quot;,&amp;aux)==1 &amp;&amp; aux!=256;++i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[i]=aux;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpaquete=i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Paquete %d recibido a las %s de longitud %d:\n\n&quot;,num_paquete,tiempo,lpaquete);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;MAC de destino: %02X-%02X-%02X-%02X-%02X-%02X\n&quot;,byte[0],byte[1],byte[2],byte[3],byte[4],byte[5]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;MAC de origen : %02X-%02X-%02X-%02X-%02X-%02X\n&quot;,byte[6],byte[7],byte[8],byte[9],byte[10],byte[11]);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>/* Si el campo Type=0x0800=2048 se trata de un paquete IP */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(byte[12]*256+byte[13]!=2048)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;IPv%d\n&quot;,byte[14]/16);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcabecera=(byte[14]%16)*4;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Longitud de la cabecera: %d bytes\n&quot;,lcabecera);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servicio=byte[15];&nbsp; /* Aquí falta una tabla */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lip=byte[16]*16+byte[17];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Longitud total: %d bytes\n&quot;,lip);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ldatos=lip-lcabecera;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proto=byte[23];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(proto)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo ICMP\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo IGMP\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 4:&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo IP\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 6:&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo TCP\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 17:&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo UDP\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 41:&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo IPv6\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 46:&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo RSVP\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 58:&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo ICMPv6\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 89:&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Protocolo OSPF\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Otro protocolo\n&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Direccion IP de origen : %d.%d.%d.%d\n&quot;,byte[26],byte[27],byte[28],byte[29]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Direccion IP de destino: %d.%d.%d.%d\n&quot;,byte[30],byte[31],byte[32],byte[33]);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Puerto de origen : %d\n&quot;,byte[34]*256+byte[35]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;Puerto de destino: %d\n&quot;,byte[36]*256+byte[37]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,&quot;\n\n&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if(flag==1) fprintf(res,&quot;El filtro no funciona!!!&quot;);<br>&nbsp;&nbsp;&nbsp; fclose(buffer);<br>&nbsp;&nbsp;&nbsp; fclose(res);<br>}</p>
<p><br><br>int main()<br>{<br>&nbsp;&nbsp;&nbsp; reconoce_nics_y_elige_una();<br>&nbsp;&nbsp;&nbsp; puts(&quot;ya elegiste&quot;);<br>&nbsp;&nbsp;&nbsp; captura_y_almacena_paquetes();<br>&nbsp;&nbsp;&nbsp; puts(&quot;ya almacenaste&quot;);<br>&nbsp;&nbsp;&nbsp; interpreta_paquetes();<br>&nbsp;&nbsp;&nbsp; return 0;
<br>}</p>
<p>&nbsp;</p>
<p>Please help me.&nbsp;I&nbsp;need some statistics about packets.</p>
<p>Best regards.</p></div>
<div>&nbsp;</div>