Código c:
Ver original
#include <pcap.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/if_ether.h> #include <netinet/ether.h> #include <netinet/ip.h> //Funcion my_callback, sera invocada cada vez que se reciba un paquete void my_callback(u_char *useless,const struct pcap_pkthdr* pkthdr,const u_char* packet) { static int count = 0; //Esta variable sirve para contar los paquetes count ++; struct ether_header *eptr; /* Ahora extraemos la cabecera IP, por lo que tenemos que desplazar el tamaño de la cabecera Ethernet */ struct ip *ipc; ipc=packet+sizeof(struct ether_header); } int main(int argc,char **argv) { char *dev; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr; const u_char *packet; struct pcap_pkthdr hdr; struct ether_header *eptr; // Ethernet bpf_u_int32 maskp; // mascara de subred bpf_u_int32 netp; // direccion de red dev = pcap_lookupdev(errbuf); //Buscamos un dispositivo del que comenzar la captura if (dev == NULL) else descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); //comenzamos la captura en modo promiscuo pcap_loop(descr,-1,my_callback,NULL); //entramos en el bucle (infinito) return 0; }
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