Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sacar dirección IP

Estas en el tema de Sacar dirección IP en el foro de C/C++ en Foros del Web. Hola, soy novato así que no se si esto va aquí. Mirad mi problema. Estoy haciendo un programa en C utilizando las librerías Libpcap en ...
  #1 (permalink)  
Antiguo 29/07/2009, 02:54
 
Fecha de Ingreso: julio-2009
Mensajes: 1
Antigüedad: 14 años, 9 meses
Puntos: 0
Hola, soy novato así que no se si esto va aquí. Mirad mi problema. Estoy haciendo un programa en C utilizando las librerías Libpcap en linux, y quiero sacar las direcciones ip que más ancho de banda están consumiendo, por ahora llevo esto pero no se como continuar, este código que os pongo aquí lo que hace es motrar dirección de origen, dirección de destino y tamaño de todos los paquetes que se están capturando, alguno tiene idea??

Código c:
Ver original
  1. #include <pcap.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <netinet/if_ether.h>
  9. #include <netinet/ether.h>
  10. #include <netinet/ip.h>
  11.  
  12. //Funcion my_callback, sera invocada cada vez que se reciba un paquete
  13. void my_callback(u_char *useless,const struct pcap_pkthdr* pkthdr,const u_char* packet)
  14. {
  15.     static int count = 0; //Esta variable sirve para contar los paquetes
  16.     count ++;
  17.     printf("Paquete: %d\n", count);
  18.  
  19.     struct ether_header *eptr;
  20.  
  21.  
  22. /* Ahora extraemos la cabecera IP, por lo que tenemos
  23. que desplazar el tamaño de la cabecera Ethernet
  24. */
  25.  
  26. struct ip *ipc;
  27. ipc=packet+sizeof(struct ether_header);
  28. printf("IP origen: %s\n",inet_ntoa(ipc->ip_src));
  29. printf("IP destino: %s\n",inet_ntoa(ipc->ip_dst));
  30. printf("Longitud del datagrama ip: \n %i\n",ipc->ip_len);
  31. }
  32.  
  33.  
  34. int main(int argc,char **argv)
  35. {
  36. char *dev;
  37. char errbuf[PCAP_ERRBUF_SIZE];
  38. pcap_t* descr;
  39. const u_char *packet;
  40. struct pcap_pkthdr hdr;
  41. struct ether_header *eptr; // Ethernet
  42. bpf_u_int32 maskp; // mascara de subred
  43. bpf_u_int32 netp; // direccion de red
  44.  
  45. dev = pcap_lookupdev(errbuf); //Buscamos un dispositivo del que comenzar la captura
  46. if (dev == NULL)
  47. {fprintf(stderr," %s\n",errbuf); exit(1);}
  48. else
  49. {printf("Abriendo %s en modo promiscuo\n",dev);}
  50. descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); //comenzamos la captura en modo promiscuo
  51.  
  52. pcap_loop(descr,-1,my_callback,NULL); //entramos en el bucle (infinito)
  53. return 0;
  54. }

Alguien tiene idea de como se haría. Sería sacar las direcciones que más ancho de banda consumen, he intentado hacerlo mediante un array donde se guardan las direcciones IP, pero no lo consigo.

No haría falta ni que el programa se detuviera, que siguiera todo el rato funcionando, mostrando la IP que más consume, y que el usuario lo detenga pulsando Control+c

Última edición por David; 29/07/2009 a las 09:08 Razón: Combinar mensajes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:32.