<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2995" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2>Pcap_stats_ex expects you (i.e. the caller) to allocate the 
pcap_stat structure. The right code should be something like</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2><FONT size=3>struct pcap_stat 
estadisticas;</FONT></FONT></DIV>
<DIV><FONT size=2><FONT size=3></FONT></FONT>&nbsp;</DIV>
<DIV><FONT size=2><FONT 
size=3>pcap_stats_ex(descriptor,&amp;estadisticas);</FONT><BR></FONT></DIV>
<DIV><FONT size=2>Hope it helps</FONT></DIV>
<DIV><FONT size=2>GV</FONT></DIV>
<DIV><FONT size=2>&nbsp;</DIV>
<DIV><BR></DIV></FONT>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=antonio.ocampo@gmail.com 
  href="mailto:antonio.ocampo@gmail.com">Antonio Ocampo</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A title=winpcap-users@winpcap.org 
  href="mailto:winpcap-users@winpcap.org">winpcap-users@winpcap.org</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Tuesday, November 28, 2006 2:16 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> [Winpcap-users] 
  pcap_stats_ex</DIV>
  <DIV><BR></DIV>
  <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 "pcap.h"</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], "%d.%d.%d.%d", 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><FONT size=2></FONT><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("%d. %s\n",n,d-&gt;name);</P>
  <P>&nbsp; if (d-&gt;description)<BR>&nbsp;&nbsp; printf("\tDescripcion: 
  %s\n",d-&gt;description);&nbsp;&nbsp;&nbsp; <BR>&nbsp; <BR>&nbsp; 
  else<BR>&nbsp;&nbsp; printf("\tDescripcion no disponible\n");<BR>&nbsp; 
  <BR>&nbsp; printf("\tLoopback: %s\n",(d-&gt;flags &amp; PCAP_IF_LOOPBACK)? 
  "Si":"No"); /* 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("\tFamilia de direcciones: 
  #%d\n",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("\tNombre de la 
  familia de direcciones : 
  AF_INET\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a-&gt;addr) 
  printf("\tDireccion: %s\n",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("\tMascara de Subred: %s\n",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("\tDireccion de Broadcast: %s\n",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("\tDireccion de Destino: %s\n",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("\tNombre de la familia de direcciones : AF_INET6\n");&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("\tDireccion: %s\n", 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("\tNombre desconocido de 
  la familia de direcciones\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }<BR>&nbsp; <BR>&nbsp; 
  printf("\n");<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("cls");</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("Error en la captura de NICs: %s\n", 
  buffer_error);<BR>&nbsp;&nbsp;exit(1);<BR>&nbsp;}</P>
  <P>&nbsp;printf("\nLas NICs encontradas son:\n\n");</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("\nNo se encontraron NICs! 
  Verifica que Winpcap este 
  instalado...");<BR>&nbsp;&nbsp;exit(1);<BR>&nbsp;}</P>
  <P>&nbsp;while(1)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  printf("\nIngrese el numero de interface de la cual desea capturar los 
  paquetes (1-%d): ",i);<BR>&nbsp;&nbsp; scanf("%d", &amp;id_nic);</P>
  <P>&nbsp;&nbsp; if(id_nic &lt; 1 || id_nic &gt; 
  i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts("El numero de interface esta 
  fuera del rango.");</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]="ip",nombre[30]="paquetes.txt";<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("\nNo se puede abrir el adaptador 
  porque %s no es soportado por WinPcap\n", 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("\nNo se puede compilar el 
  filtro.\n");<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("\nError 
  aplicando el 
  filtro.\n");<BR>&nbsp;&nbsp;pcap_freealldevs(nics);&nbsp;&nbsp;&nbsp; 
  <BR>&nbsp;&nbsp;exit(1);<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 
  printf("Ingrese el numero maximo de paquetes a capturar: "); 
  <BR>&nbsp;scanf("%d",&amp;cantidad_paquetes);<BR>&nbsp;system("pause");<BR>&nbsp;&nbsp;&nbsp; 
  system("cls");<BR>&nbsp;&nbsp;&nbsp; printf("\nCapturando paquetes de 
  %s...\n\n", d-&gt;description);</P>
  <P>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
  buffer=fopen(nombre,"w");&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,"Pasando de la zona 
  de Kernel a la de usuario...\n\n");*/ <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, "%H:%M:%S", 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,"%d 
  %s.%.6d\n",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,"Paquete #%d capturado a las %s.%.6d de %d bytes de longitud 
  \n\n", 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,"%02X ", 
  paquete[i-1]);<BR>&nbsp;&nbsp;&nbsp;if ( (i &amp; 15) == 0) 
  fprintf(buffer,"\n");<BR>&nbsp;&nbsp;}</P>
  <P>&nbsp;&nbsp;fprintf(buffer,"100\n\n\n"); /* el 100 sirve como delimitador 
  de paquete */<BR>&nbsp;}</P>
  <P>&nbsp;&nbsp;&nbsp; puts("al menos llegas");<BR>&nbsp;&nbsp;&nbsp; 
  pcap_stats_ex(descriptor,estadisticas);<BR>&nbsp;&nbsp;&nbsp; puts("y 
  aca?");<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]="paquetes.txt",salida[30]="resultados.txt";<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,"r");<BR>&nbsp;&nbsp;&nbsp; 
  res=fopen(salida,"w");<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
  while(fscanf(buffer,"%d 
  %s\n",&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,"%X",&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,"Paquete 
  %d recibido a las %s de longitud %d:\n\n",num_paquete,tiempo,lpaquete); 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,"MAC de destino: 
  %02X-%02X-%02X-%02X-%02X-%02X\n",byte[0],byte[1],byte[2],byte[3],byte[4],byte[5]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fprintf(res,"MAC de origen : 
  %02X-%02X-%02X-%02X-%02X-%02X\n",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,"IPv%d\n",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,"Longitud de la cabecera: %d 
  bytes\n",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,"Longitud total: %d bytes\n",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,"Protocolo 
  ICMP\n");<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,"Protocolo 
  IGMP\n");<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,"Protocolo 
  IP\n");<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,"Protocolo 
  TCP\n");<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,"Protocolo 
  UDP\n");<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,"Protocolo 
  IPv6\n");<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,"Protocolo 
  RSVP\n");<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,"Protocolo 
  ICMPv6\n");<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,"Protocolo 
  OSPF\n");<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,"Otro 
  protocolo\n");<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,"Direccion IP de 
  origen : 
  %d.%d.%d.%d\n",byte[26],byte[27],byte[28],byte[29]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fprintf(res,"Direccion IP de destino: 
  %d.%d.%d.%d\n",byte[30],byte[31],byte[32],byte[33]); 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(res,"Puerto de origen : 
  %d\n",byte[34]*256+byte[35]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fprintf(res,"Puerto de destino: 
  %d\n",byte[36]*256+byte[37]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  fprintf(res,"\n\n");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
  <BR>&nbsp;&nbsp;&nbsp; if(flag==1) fprintf(res,"El filtro no 
  funciona!!!");<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("ya 
  elegiste");<BR>&nbsp;&nbsp;&nbsp; 
  captura_y_almacena_paquetes();<BR>&nbsp;&nbsp;&nbsp; puts("ya 
  almacenaste");<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>
  <P>
  <HR>

  <P></P>_______________________________________________<BR>Winpcap-users 
  mailing 
  list<BR>Winpcap-users@winpcap.org<BR>https://www.winpcap.org/mailman/listinfo/winpcap-users<BR></BLOCKQUOTE></BODY></HTML>