Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1664 connectés 

  FORUM HardWare.fr
  Programmation
  C

  lecture de trame

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lecture de trame

n°1957682
anjali
Posté le 13-01-2010 à 18:20:49  profilanswer
 

Bonsoir tout le monde.

 

Je suis entrain de faire un projet portant sur le décodage de trames Ethernet/TCP-IP et son diagnostic de vulnérabilité.

 

Bon pour faire simple je vais vous copier/coller le "travail à réaliser"

 

Travail à réaliser:

 

Pour établir les connexions et enregistrer les trames de réponse les programmes "portscan2" et "wiredump" sont mis à votre disposition. Ils s'occupent de sauvegarder les trames dans les fichiers "dump.txt" et "dump.pcap". Normalement le programme "portscan2" est appelé par le script "scriptdelancement". Vous n'avez donc pas à l'utiliser directement. En fait vous devez écrire l'équivalent du programme "decode" (appelé lui aussi dans le "scriptdelancement" ) qui lit les trames dans le fichier "dump.txt" et les décode afin de savoir si c'est une trame indiquant une connexion acceptée sur le port spécifié. Ce fichier est au format texte, il se compose d'une trame par ligne, chaque octet est écrit sous sa forme hexadécimale et séparé des autres par un espace.

 

Fichier dump.txt :

 

00 0c 29 80 83 2f 00 50 56 f8 98 7c 08 00 45 00 00 28 60 8f 00 00 80 06 9b 2b 4a 7d 4d 68 c0 a8 e6 87 00 4f 8d f4 2c 06 3b a5 f7 4d 97 c8 50 10 fa f0 f0 c8 00 00 00 00 00 00 00 00
00 0c 29 80 83 2f 00 50 56 f8 98 7c 08 00 45 00 00 28 60 90 00 00 80 06 9b 2a 4a 7d 4d 68 c0 a8 e6 87 00 4f 8d f4 2c 06 3b a5 f7 4d 97 c8 50 10 fa f0 f0 c8 00 00 00 00 00 00 00 00
00 0c 29 80 83 2f 00 50 56 f8 98 7c 08 00 45 00 00 28 60 91 00 00 80 06 9b 29 4a 7d 4d 68 c0 a8 e6 87 00 4f 8d f4 2c 06 3b a5 f7 4d 97 c8 50 14 fa f0 f0 c4 00 00 00 00 00 00 00 00

 


VOILA MON TRAVAIL QUE J'AI COMMENCE AUJOURD'HUI (et que je dois rendre demain dans l'apres midi ) :

 


Code :
  1. /*Procedure qui enleve les espaces*/
  2. void enleveespaces (const char trameAvecEspace[])
  3. {
  4.  int i,j,n = strlen(trameAvecEspace);
  5.  for (i = 0 ; i <= n ; i++)
  6.    {
  7.      if (trameAvecEspace[i]==' ')
  8.        {
  9.          for(j = i ; j <= n ; j++)
  10.            {
  11.              trameAvecEspace[j]=trameAvecEspace[j+1];
  12.            }
  13.        }
  14.    }
  15. }
  16.  
  17. /*Fonction "decoupe" qui d\u00e9coupe "trame"*/
  18.  
  19. char *decoupe (const char *trameAvecEspace, unsigned int debut, unsigned int fin)
  20. {
  21.  char *new_trameAvecEspace = NULL;
  22.  int i;
  23.  if (trameAvecEspace != NULL && debut< fin)
  24.    {
  25.  
  26.      new_trameAvecEspace = malloc (sizeof (*new_trameAvecEspace) * (fin - debut * 2));
  27.  
  28.      if (new_trameAvecEspace != NULL)
  29.        {
  30.          for (i = debut; i <=fin; i++)
  31.            {
  32.              new_trameAvecEspace[i-debut] = trameAvecEspace[i];
  33.            }
  34.          new_trameAvecEspace[i-debut] = '\0';
  35.        }
  36.    }
  37.  
  38.  return new_trameAvecEspace;
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44.  const char *IP, *TCP, *ethernet;
  45.  const char *trameAvecEspace;
  46.  
  47.  /*Partie ethernet*/
  48.  const char *Adresse_source1, *Adresse_destination1, *Protocole1;
  49.  
  50.  
  51.  /*Partie IP*/
  52.  const char *Version_IP, *Long_entete, *Type_service, *Long_total, *Identification, *Flag1, *TTL, *Protocole2, *Checksum1, *Adresse_source2, *Adresse_destination2;
  53.  
  54.  
  55.  /*Partie TCP*/
  56.  const char *Port_source, *Port_destination, *Num_sequence, *Num_acquittement, *Taille_entete, *Flag2, *Taille_fenetre, *Checksum2;
  57.  const char *ACK;
  58.  
  59.  
  60.  
  61.  
  62.  /*decoupage de la trame*/
  63.  ethernet = decoupe(trameAvecEspace, 0, 42);
  64.  IP = decoupe(trameAvecEspace,42 , 102);
  65.  TCP = decoupe(trameAvecEspace,102 , 180);
  66.  
  67.  
  68.  
  69.  
  70.  /*decoupage des champs*/
  71.  
  72.  /*Ethernet*/
  73.  Adresse_destination1 = decoupe(ethernet, 0,18);
  74.  Adresse_source1 = decoupe(ethernet, 18,36);
  75.  Protocole1 = decoupe(ethernet, 36,42);
  76.  
  77.  printf(">>Partie Ethernet<<\n\n" );
  78.  printf("Adresse de destination : %s\n", Adresse_destination1);
  79.  printf("Adresse source : %s\n" , Adresse_source1);
  80.  printf("Protocole : %s\n\n", Protocole1);
  81.  
  82.  /*Partie IP*/
  83.  Version_IP = decoupe(IP, 0,1);
  84.  Long_entete = decoupe(IP, 2,3);
  85.  Type_service = decoupe(IP, 3,6);
  86.  Long_total = decoupe(IP, 6,12);
  87.  Identification = decoupe(IP, 12,18);
  88.  Flag1 = decoupe(IP, 18,24);
  89.  TTL = decoupe(IP, 24,26);
  90.  Protocole2 = decoupe(IP, 27,30);
  91.  Checksum1 = decoupe (IP, 30,36);
  92.  Adresse_source2 = decoupe(IP, 36,48);
  93.  Adresse_destination2 = decoupe(IP, 48,60);
  94.  
  95.  /*Partie TCP*/
  96.  Port_source = decoupe(TCP, 0,6);
  97.  Port_destination = decoupe(TCP, 6,12);
  98.  Num_sequence = decoupe(TCP, 12,24);
  99.  Num_acquittement = decoupe(TCP, 24,36);
  100.  Taille_entete = decoupe(TCP, 36,39);
  101.  Flag2 = decoupe(TCP, 39,42);
  102.  Taille_fenetre = decoupe(TCP, 43,48);
  103.  Checksum2 = decoupe(TCP, 48,54);
  104.  
  105.  
  106.  
  107.  /*Convertir en d\u00e9cimal*/
  108.  unsigned long decPort_source, decPort_destination, decFlag2, decTaille_fenetre;
  109.  
  110.  decPort_source = strtoul(Port_source,0,16);
  111.  decPort_destination = strtoul(Port_destination,0,16);
  112.  decFlag2 = strtoul(Flag2,0,16);
  113.  decTaille_fenetre = strtoul(Taille_fenetre,0,16);
  114.  
  115.  
  116.  
  117.  /*Convertir en binaire Flag2*/
  118.  int i;
  119.  int bin[8] = {0};
  120.  
  121.  for (i=0; i<8 ; i++)
  122.    {
  123.      bin[i] = decFlag2 % 2;
  124.      decFlag2 = decFlag2 /2;
  125.    }
  126.  
  127.  
  128.  printf(">>Partie TCP<<\n\n" );
  129.  printf("Port source : %d\n", decPort_source);
  130.  printf("Port destination : %d\n" , decPort_destination);
  131.  printf("Numero de sequence : %s\n", Num_sequence);
  132.  printf("Numero d'acquittement : %s\n", Num_acquittement);
  133.  printf("Taille de l'entete : %s\n" , Taille_entete);
  134.  printf("Taille de la fenetre : %d\n", decTaille_fenetre);
  135.  printf("Checksum : %s\n\n\n", Checksum2);
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  const int MTU = 1500;
  148.  const int MAXchar = 1500*2+1500+2;
  149.  
  150.  typedef char t_filename[1024];
  151.  
  152.  
  153.  void lecture(t_filename fichier){
  154.    FILE *fd;
  155.    char str[MAXchar];
  156.    if ((fd = fopen(fichier,"r" )) == NULL)
  157.      fprintf(stderr,"ERREUR DE CHARGEMENT DE FICHIER\n" );
  158.    else {
  159.      while (!feof(fd)){
  160.        fgets(str,MAXchar,fd);
  161.        printf("%s <BR>\n",str);
  162.      }
  163.      fclose(fd);
  164.    }
  165.  }
  166.  
  167.  
  168. #define TAILLE_MAX 1000
  169.  
  170.  int main(int argc, char *argv[])
  171.  {
  172.    FILE* fichier = NULL;
  173.    char chaine[TAILLE_MAX] = "";
  174.    char new_chaine[TAILLE_MAX];
  175.    fichier = fopen("dump.txt", "r" );
  176.  
  177.    if (fichier != NULL)
  178.      {
  179.        while(!feof(fichier))
  180.          {
  181.            fgets(chaine, TAILLE_MAX, fichier);
  182.            enleveespaces(chaine);
  183.            printf("%s", chaine);
  184.          }
  185.  
  186.        fclose(fichier);
  187.      }
  188.  
  189.    return 0;
  190.  }


Mais voilà il y a un probleme avec ma procédure "eneleveespaces"...
Voila ce que ca m'affiche en le compilant:

 


Citation :

In function 'enleveespaces':
ligne 16:erreur: assignment of read-only location


Je pense que c'est mon "trameAvecEspace" qui pose problème...(en espérant qu'il soit résolu rapidement!! )

 

PS: mince!! je viens de voir que la mise en page n'était pas terrible,avec un manque de couleur et une mauvaise pagination :s(surement du à un mauvais copier/coller )


Message édité par gilou le 13-01-2010 à 20:45:41
mood
Publicité
Posté le 13-01-2010 à 18:20:49  profilanswer
 

n°1957697
theShockWa​ve
I work at a firm named Koslow
Posté le 13-01-2010 à 18:35:40  profilanswer
 

utilise les balises [ cpp ]


---------------
last.fm
n°1957720
anjali
Posté le 13-01-2010 à 20:14:13  profilanswer
 

les balises [ cpp ] ...je suis encore un novice dans ce domaine...pourrais-tu m'expliquer rapidement...(ou me passer un liens portant sur ce sujet:p)

n°1957727
gilou
Modérateur
Modosaurus Rex
Posté le 13-01-2010 à 20:55:57  profilanswer
 

J'ai mis les bonnes balises et indenté ce code illisible sinon.

Citation :

const char trameAvecEspace[]

trameAvecEspace est donc un array de char non-modifiables, or justement, tu essayes de modifier leur valeur dans la fonction avec le code trameAvecEspace[j]=trameAvecEspace[j+1]
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
n°1957737
anjali
Posté le 13-01-2010 à 22:27:54  profilanswer
 

ok merci beaucoup!
je viens de voir que c'est assez "débile" d'avoir mis "const char" alors que je veux le modifier... mais si je le change cela ne perturberas pas le  découpage de la trame :
#
/*decoupage de la trame*/
#
 ethernet = decoupe(trameAvecEspace, 0, 42);
#
 IP = decoupe(trameAvecEspace,42 , 102);
#
 TCP = decoupe(trameAvecEspace,102 , 180);
#
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  lecture de trame

 

Sujets relatifs
Accès lecture fichier depuis webservice ASP.NETJMF
Problème de lecture de base de données SQLite (Java)problème de lecture d'un fichier texte
[Résolu][PHP] lecture d'objet XML en php[résolu][PHP/XML] lecture de fichier XML en PHP
[C] [resolu] lecture matrice alloué dynamiquementarbre binaire/fonction recursif/lecture fichier
lecture d'un flv (random)lecture d'un .flv (fonction random)
Plus de sujets relatifs à : lecture de trame


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)