int main(int argc, char *argv[]) { Parameters *params; // user defined parameters double ***phi; // flux array FILE *fp = NULL; // output file // Get inputs params = set_default_params(); parse_params("parameters", params); read_CLI(argc, argv, params); print_params(params); // Initial guess of flux phi = init_flux(params); solve(phi, params); printf("keff = %f\n", params->k); // Write solution if(params->write_flux == TRUE) { write_flux(phi, params, fp); } // Free memory free_flux(phi); free(params); return 0; }
int main(int argc, char **argv) { if(argc < 2) { errno = EINVAL; perror("Un fichier pcap doit être passé en argument"); exit(1); } char errbuf[PCAP_ERRBUF_SIZE]; pkthdr h; Flux *flu; // Ouverture du fichier pcap_t *file = pcap_open_offline(argv[1], errbuf); const u_char *packet = pcap_next(file, &h); // Taille des en-têtes u_int size_ip, size_tcp; // Structures des différents en-têtes const sniff_eth *ethernet; /* The ethernet header */ const sniff_ip *ip; /* The IP header */ const sniff_tcp *tcp; /* The TCP header */ // Lecture des packets while(packet != NULL) { ethernet = (sniff_eth*)(packet); // Si on a l'entête IP qui suit if(ethernet->type == IP_T) { ip = (sniff_ip*)(packet + SIZE_ETHERNET); size_ip = IP_HL(ip)*4; // Si c'est un protocole TCP if(ip->prot == TCP) { tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip); size_tcp = TH_OFF(tcp)*4; // On récupère les IPs u_char *ip_src = calloc(IP_LEN, sizeof(u_char)); memcpy(ip_src, ip->src, sizeof(ip->src)); u_char *ip_dst = calloc(IP_LEN, sizeof(u_char)); memcpy(ip_dst, ip->dst, sizeof(ip->dst)); // On récupère les ports int port_src = htons(tcp->s_port); int port_dst = htons(tcp->d_port); // On change la taille du packet par la taille des données h.len = htons(ip->tot_len) - size_ip - size_tcp; // on récupère le flux, ou on en creer un s'il n'existe pas flu = add_flux(ip_src, ip_dst, port_src, port_dst); // Si on a un flux alors on lui ajoute ce packet if(flu != NULL) add_packet(flu, &h); } } // On lit le packet suivant packet = pcap_next(file, &h); } // On ecrit les fichiers de flux write_flux(); // On nettoie la mémoire clean(); printf("Pour créer le graph représentant l'évolution du débit en fonction du temps sur un flux,\n"); printf("Choisissez le flux qui correspond à votre téléchargement, notez son numéro et taper dans la console:\n$ ./plot numero_flux\n"); return 0; }