Code :
/*Procedure qui enleve les espaces*/ void enleveespaces (const char trameAvecEspace[]) { int i,j,n = strlen(trameAvecEspace); for (i = 0 ; i <= n ; i++) { if (trameAvecEspace[i]==' ') { for(j = i ; j <= n ; j++) { trameAvecEspace[j]=trameAvecEspace[j+1]; } } } } /*Fonction "decoupe" qui d\u00e9coupe "trame"*/ char *decoupe (const char *trameAvecEspace, unsigned int debut, unsigned int fin) { char *new_trameAvecEspace = NULL; int i; if (trameAvecEspace != NULL && debut< fin) { new_trameAvecEspace = malloc (sizeof (*new_trameAvecEspace) * (fin - debut * 2)); if (new_trameAvecEspace != NULL) { for (i = debut; i <=fin; i++) { new_trameAvecEspace[i-debut] = trameAvecEspace[i]; } new_trameAvecEspace[i-debut] = '\0'; } } return new_trameAvecEspace; } int main() { const char *IP, *TCP, *ethernet; const char *trameAvecEspace; /*Partie ethernet*/ const char *Adresse_source1, *Adresse_destination1, *Protocole1; /*Partie IP*/ const char *Version_IP, *Long_entete, *Type_service, *Long_total, *Identification, *Flag1, *TTL, *Protocole2, *Checksum1, *Adresse_source2, *Adresse_destination2; /*Partie TCP*/ const char *Port_source, *Port_destination, *Num_sequence, *Num_acquittement, *Taille_entete, *Flag2, *Taille_fenetre, *Checksum2; const char *ACK; /*decoupage de la trame*/ ethernet = decoupe(trameAvecEspace, 0, 42); IP = decoupe(trameAvecEspace,42 , 102); TCP = decoupe(trameAvecEspace,102 , 180); /*decoupage des champs*/ /*Ethernet*/ Adresse_destination1 = decoupe(ethernet, 0,18); Adresse_source1 = decoupe(ethernet, 18,36); Protocole1 = decoupe(ethernet, 36,42); printf(">>Partie Ethernet<<\n\n" ); printf("Adresse de destination : %s\n", Adresse_destination1); printf("Adresse source : %s\n" , Adresse_source1); printf("Protocole : %s\n\n", Protocole1); /*Partie IP*/ Version_IP = decoupe(IP, 0,1); Long_entete = decoupe(IP, 2,3); Type_service = decoupe(IP, 3,6); Long_total = decoupe(IP, 6,12); Identification = decoupe(IP, 12,18); Flag1 = decoupe(IP, 18,24); TTL = decoupe(IP, 24,26); Protocole2 = decoupe(IP, 27,30); Checksum1 = decoupe (IP, 30,36); Adresse_source2 = decoupe(IP, 36,48); Adresse_destination2 = decoupe(IP, 48,60); /*Partie TCP*/ Port_source = decoupe(TCP, 0,6); Port_destination = decoupe(TCP, 6,12); Num_sequence = decoupe(TCP, 12,24); Num_acquittement = decoupe(TCP, 24,36); Taille_entete = decoupe(TCP, 36,39); Flag2 = decoupe(TCP, 39,42); Taille_fenetre = decoupe(TCP, 43,48); Checksum2 = decoupe(TCP, 48,54); /*Convertir en d\u00e9cimal*/ unsigned long decPort_source, decPort_destination, decFlag2, decTaille_fenetre; decPort_source = strtoul(Port_source,0,16); decPort_destination = strtoul(Port_destination,0,16); decFlag2 = strtoul(Flag2,0,16); decTaille_fenetre = strtoul(Taille_fenetre,0,16); /*Convertir en binaire Flag2*/ int i; int bin[8] = {0}; for (i=0; i<8 ; i++) { bin[i] = decFlag2 % 2; decFlag2 = decFlag2 /2; } printf(">>Partie TCP<<\n\n" ); printf("Port source : %d\n", decPort_source); printf("Port destination : %d\n" , decPort_destination); printf("Numero de sequence : %s\n", Num_sequence); printf("Numero d'acquittement : %s\n", Num_acquittement); printf("Taille de l'entete : %s\n" , Taille_entete); printf("Taille de la fenetre : %d\n", decTaille_fenetre); printf("Checksum : %s\n\n\n", Checksum2); const int MTU = 1500; const int MAXchar = 1500*2+1500+2; typedef char t_filename[1024]; void lecture(t_filename fichier){ FILE *fd; char str[MAXchar]; if ((fd = fopen(fichier,"r" )) == NULL) fprintf(stderr,"ERREUR DE CHARGEMENT DE FICHIER\n" ); else { while (!feof(fd)){ fgets(str,MAXchar,fd); printf("%s <BR>\n",str); } fclose(fd); } } #define TAILLE_MAX 1000 int main(int argc, char *argv[]) { FILE* fichier = NULL; char chaine[TAILLE_MAX] = ""; char new_chaine[TAILLE_MAX]; fichier = fopen("dump.txt", "r" ); if (fichier != NULL) { while(!feof(fichier)) { fgets(chaine, TAILLE_MAX, fichier); enleveespaces(chaine); printf("%s", chaine); } fclose(fichier); } return 0; }
|