コード例 #1
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
enum Evenements AfficherParametres( struct Global *g)
{
 char Buffer[20] ;

 Ipv4ToS(g->IPInterface,Buffer) ;
 printf("Adresse IP    :%s \n",Buffer);
 Ipv4ToS(g->NetworkMask,Buffer ) ;
 printf("Masque R�eau :%s \n",Buffer);
 Ipv4ToS(g->Gateway,Buffer ) ;
 printf("Adresse Passerelle :%s \n",Buffer);
 Ipv4ToS(g->IPDNS,Buffer ) ;
 printf("Adresse serveur DNS :%s \n",Buffer);
 printf("Port pour votre client DNS :%d \n",g->PortRequeteDNS);
 printf("Port Application     :%d \n",g->PortApplication);
 printf("Protocole utilis�:") ;
 if ( g->Protocole == UDP )
     printf("UDP\n") ;
 else
     if ( g->Protocole == TCP )
         printf("TCP \n") ;
     else
        printf("??? \n") ;
 printf("ServiceDNS %d \n", g->ActivationDNS  );
 return(NEAN) ;
}
コード例 #2
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
void AffichePaquet( struct Paquet *pp)
{
 char Buffer1[30], Buffer2[30] ;
 Ipv4ToS(pp->IPSource,Buffer1 ) ;
 Ipv4ToS(pp->IPDestination,Buffer2 ) ;
 fprintf(stderr,"Reseau:message :%s:%s %d\n",Buffer1,Buffer2,pp->Protocole) ;
}
コード例 #3
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
enum Evenements RequeteDNS(char Buffer[],int *PTS,int *PTD,int IPSource, int *IPDestination,int *Protocole,struct Global *g)
{
  int Ip ;
  char NomDNS[50] ;
	
  printf("Traitement d'une requete DNS %s \n",Buffer) ;
  Ip = RechercheNomDB(FICHIERDNS,Buffer) ;
  if(Ip)
    {
     char ChaineIP[80] ;
     Ipv4ToS(Ip,ChaineIP ) ;
     printf("L'ip de %s est %s \n",Buffer,ChaineIP) ;
     /* fabrication de la r�onse */
      strcpy(NomDNS,Buffer ) ;
      sprintf(Buffer,"%s %s",NomDNS,ChaineIP) ;
      *PTD = *PTS ;
      *PTS = 53 ;
      *IPDestination = IPSource ;
      *Protocole = UDP ;  
      return(ENVOI) ;
     }
	 else
	    printf("Resolution impossible !!!\n") ;  
	return(NEAN) ;
}	
コード例 #4
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
enum Evenements GenerationTrame(struct Trame *UneTrame,void *Contenu, struct Global *g )
{
   char Buffer[200] ;
         char BufferIP[20] ;
   int rc ;
  /* Remplissage de la trame */
         UneTrame->Numero = 0 ;
	 UneTrame->MacDestination.Constructeur = 0xFF ;
	 UneTrame->MacDestination.Numero = g->MacD ; /* Je nai pas implement�arp */
         UneTrame->MacSource.Constructeur = 0xFF ;
	 UneTrame->MacSource.Numero = g->IPInterface ; /* Je nai pas implement�arp */
         /* &(g->IPInterface) */
         memcpy(UneTrame->Buffer,Contenu,sizeof(UneTrame->Buffer)) ;
         Ipv4ToS((UneTrame->MacDestination).Numero,BufferIP ) ; /* A controler */
         fprintf(stderr,"Liaison:   contenu :%s  vers FF:%s \n",UneTrame->Buffer,BufferIP ) ;
         AffichePaquet((struct Paquet *)  UneTrame->Buffer) ;
          rc = VersCouchePhysique(&(g->TPhys),UneTrame,sizeof(struct Trame)) ; 
         if (rc == -1 )
           {
            perror("Motif:") ;
            return(NEAN) ;
           }
         else
           {
            fprintf(stderr,"Liaison: %d bytes �rits\n",rc) ;
	    return(ENVOI) ;
           }
}
コード例 #5
0
ファイル: routeur.c プロジェクト: RaphaelJ/Cours-2e-annee
void AfficheTableRoutage(struct EntreeTableRoutage  TableRoutage[],int NbrEntrees )
{
 int i = 0 ;
 while(i < NbrEntrees )
 {
  char Buffer[30]  ;
  char Buffer2[30] ;
  char Buffer3[30] ;
  
  Ipv4ToS(TableRoutage[i].Adresse,Buffer) ;
  Ipv4ToS(TableRoutage[i].Gateway,Buffer2) ;
  Ipv4ToS(TableRoutage[i].Masque,Buffer3) ;
  printf("Adresse reseau %s:Interface %d gateway %s masque %s \n",Buffer,TableRoutage[i].Ligne,Buffer2,Buffer3) ;
  i++ ;
 }
 return ;
}
コード例 #6
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
enum Evenements ReceptionICMP(Buffer,IPSource )
{
 char BufferProv[20] ;
 int *Code ;

 Ipv4ToS(IPSource,BufferProv) ;
 printf("ICMP Adresse IP Source:%s .......... \n",BufferProv);
 return(NEAN) ;
}
コード例 #7
0
ファイル: cli.c プロジェクト: bendem/DossierReseau
int main(int argc, char *argv[])
{
 int rc;
 int Desc;
 int tm;
 int Port, Ip;
 char Tampon[80];

 struct sockaddr_in psoo; /* o = origine */
 struct sockaddr_in psos; /* s = serveur */
 struct sockaddr_in psor; /* r = remote */
 struct Requete UneRequete;

 memset(&psoo, 0, sizeof(struct sockaddr_in));
 memset(&psos, 0, sizeof(struct sockaddr_in));
 memset(&psor, 0, sizeof(struct sockaddr_in));

 if (argc!=5)

{
    printf("cli client portc serveur ports\n");
    exit(1);
 }
 Desc = CreateSockets(&psoo, &psos, argv[1], atoi(argv[2]), argv[3], atoi(argv[4]));
 if (Desc == -1)
    perror("CreateSockets:");
 else
    fprintf(stderr, "CreateSockets %d\n", Desc);

  Ip = GetIP(&psoo);
  Port = GetPort(&psoo);
  memset(Tampon, 0, sizeof(Tampon));
  Ipv4ToS(Ip, Tampon);
  printf("Adresse Ip du client %s : Port %d \n", Tampon, Port);

 UneRequete.Type = Question;
 strncpy(UneRequete.Message, "Multiclient; Bonjour", sizeof(UneRequete.Message));

 rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psos);

 if (rc == -1)
    perror("SendDatagram");
 else
   fprintf(stderr, "Envoi de %d bytes\n", rc);

 memset(&UneRequete, 0, sizeof(struct Requete));
 tm = sizeof(struct Requete);

  rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor);
 if (rc == -1)
    perror("ReceiveDatagram");
 else
   fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message);


 close(Desc);
}
コード例 #8
0
ファイル: filterlib.c プロジェクト: RaphaelJ/Cours-2e-annee
void AffichageTableFiltrage(struct Regle TableFiltrage[],int NbrRegles)
{
 int I = 0 ;
 char Buffer[80] ;
 while ( I < NbrRegles )
 {
  printf("%d ",TableFiltrage[I].LigneEntree ) ;
  Ipv4ToS(TableFiltrage[I].IPSource,Buffer ) ;
  printf("%s ",Buffer ) ;
  printf(" \\ %d ", TableFiltrage[I].MasqueS ) ;
  Ipv4ToS(TableFiltrage[I].IPDestination,Buffer ) ;
  printf("%s ",Buffer ) ;
  printf(" \\ %d ", TableFiltrage[I].MasqueD ) ;
  printf("%d ",TableFiltrage[I].PortSource ) ;
  printf("%d ",TableFiltrage[I].PortDestination ) ;

  if (TableFiltrage[I].Protocole == IP )
      printf("IP ") ;
  else
    if (TableFiltrage[I].Protocole == UDP )
           printf("UDP ") ;
    else
       if (TableFiltrage[I].Protocole == TCP )
           printf("TCP ") ;
       else
	   {
	    printf("Politique non connue \n") ;
	    exit(0) ;
	   }

  if (TableFiltrage[I].Politique == DROP )
      printf("DROP \n") ;
  else
    if (TableFiltrage[I].Politique == ACCEPT )
           printf("ACCEPT \n") ;
        else
	   {
	    printf("Politique non connue \n") ;
	    exit(0) ;
	   }
  I++ ;
 }
}
コード例 #9
0
ファイル: routeur.c プロジェクト: RaphaelJ/Cours-2e-annee
int ip_address(char *Buffer,struct Global *g)
{
 int rc ;
 char arg0[80],arg0B[80],LIP[80],arg2[80],arg3[80],arg4[80] ;
 struct Interface *pI ;
 int UneIP ;
 fprintf(stderr,"Entree IP adress\n") ;
 AfficheInterfaces(g->pI) ;
 bzero(arg0,sizeof(arg0));
 bzero(LIP,sizeof(LIP));
 sscanf(Buffer,"%s %s %s\n",arg0,arg0B,LIP) ;
/*----------- arg1 est l'adresse IP ------------------------*/
 pI = RechercheInterfaceNom(g->CurrentInterface,g->pI) ;
 if ( pI == NULL )
    {
     fprintf(stderr,"Le nom de l'interface n'existe pas %s \n",g->CurrentInterface) ;
     return (0) ;
    } 
 if (Ipv4ToInt(LIP,&UneIP)!=-1) /* IP ligne valide ? */
   {
    int ETR ;
    int Ligne ;
    char Buf[30] ;
    Ipv4ToS(UneIP,Buf) ;
    Ligne = ObtenirLigne(pI) ;
    fprintf(stderr,"L'adresse Pour la ligne %d est la suivante %s.\n",Ligne, Buf  ) ;
    ETR = ObtenirEntreeTableRoutage(pI) ;
    if (ETR ==-1)
       {
        /* première fois qu on assigne une ip £*/
        AjoutEntreeTableRoutage( g->TableRoutage,UneIP & 0xFFFFFF00 , Ligne, UneIP ,0xFFFFFF00, &g->NbrEntrees) ;
        ModifieEntreeTableRoutage(g->NbrEntrees-1,pI) ;
       }
    else 
       {
        fprintf(stderr,"Modiication de l entrée de la table de routage \n") ;
        RemplaceEntreeTableRoutage( g->TableRoutage,UneIP & 0xFFFFFF00 , Ligne, UneIP ,0xFFFFFF00, ETR) ;
       }
    ModifieIP(UneIP,pI) ;
    AfficheInterfaces(g->pI) ;
   }
 else
    {
     fprintf(stderr,"L'adresse %s est mauvaise.",LIP) ;
     return 0 ;
    }
 AfficheInterfaces(g->pI) ;
 fprintf(stderr,"Sortie Ip_adress\n") ;
 return 1 ;
}
コード例 #10
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
enum Evenements ResolutionDNSFichier()
{
  char NomAResoudre[80] ;
  char NomFichier[80] ;
  char Buffer1[80] ;
   int Ip ;

  printf("Entrez le nom a v�ifier:") ;
  fgets(NomAResoudre,sizeof NomAResoudre,stdin) ;
  NomAResoudre[strlen(NomAResoudre)-1] = 0 ;
  printf("Le NomAResoudre est :%s:\n",NomAResoudre) ;
  strncpy(NomFichier,FICHIERDNS,sizeof NomFichier ) ;
  Ip = RechercheNomDB(FICHIERDNS,NomAResoudre) ;
  if(Ip)
     {
      Ipv4ToS(Ip,Buffer1 ) ;
       printf("L'ip de %s est %s \n",NomAResoudre,Buffer1) ;
      }
  return(NEAN) ;
}
コード例 #11
0
ファイル: filterlib.c プロジェクト: RaphaelJ/Cours-2e-annee
int FiltragePaquet(int LigneEntree,struct Regle TableFiltrage[],int NbrRegles, struct Paquet* PP,int *R)
{
 struct Segment *PS ;
 char Tampon[80] ;
 int i = 0 ;
 PS = ( struct Segment * ) PP->Buffer ;
 for( i = 0 ;i < NbrRegles ; i++ )
 {
  *R= i+1 ;
  fprintf(stderr,"\nReseau: Regle %d",*R ) ;
  if ( (TableFiltrage[i].LigneEntree !=0) && (TableFiltrage[i].LigneEntree != LigneEntree ))
     continue ;
  fprintf(stderr,"LE,") ;
  Ipv4ToS((PP->IPSource & generer_masque(TableFiltrage[i].MasqueS)), Tampon) ;
  fprintf(stderr,"R Masque %s \n",Tampon ) ;
  if ( (TableFiltrage[i].IPSource!=0) && (TableFiltrage[i].IPSource  != (PP->IPSource & generer_masque(TableFiltrage[i].MasqueS)) ))
     continue ;
  fprintf(stderr,"IPS,");   
  if ( (TableFiltrage[i].IPDestination!=0) && (TableFiltrage[i].IPDestination != (PP->IPDestination & generer_masque(TableFiltrage[i].MasqueD)) ))
     continue ;
  fprintf(stderr,"IPD,") ;   
  if ( (TableFiltrage[i].PortSource!=0) && (TableFiltrage[i].PortSource != PS->PortSource ))
     continue ;
  fprintf(stderr,"PS,") ;   
  if ( (TableFiltrage[i].PortDestination!=0) && (TableFiltrage[i].PortDestination != PS->PortDestination ))
     continue ;
  fprintf(stderr,"PD,") ;   
  if (TableFiltrage[i].Protocole!= IP)
     if ( (TableFiltrage[i].Protocole!=0) && (TableFiltrage[i].Protocole != PP->Protocole ))
        continue ;
  fprintf(stderr,"Protocole.") ;	
  if(TableFiltrage[i].Politique==DROP)
    return 1 ;
  if(TableFiltrage[i].Politique==ACCEPT)
    return 0 ;
 }
 *R = 0 ;
 return (0 );
}
コード例 #12
0
ファイル: routeur.c プロジェクト: RaphaelJ/Cours-2e-annee
int ip_route(char *Buffer,struct Global *g)
{
     int Adresse ;
     int Ligne ;
     int Gateway ;
     int Masque ;
     int rc ;
     struct Interface *pI ;
     char arg0[80],arg0B[80],arg1[80],arg2[80],arg3[80],arg4[80] ;

     fprintf(stderr,"Entree ip_route\n") ;

     bzero(arg0,sizeof(arg0));
     bzero(arg1,sizeof(arg1));
     bzero(arg2,sizeof(arg0));
     bzero(arg3,sizeof(arg1));
     bzero(arg4,sizeof(arg1));
     /* Syntaxe 10.1.2.0 255.255.255.0 etho  */
     sscanf(Buffer,"%s %s %s %s %s %s\n",arg0,arg0B,arg1,arg2,arg3,arg4) ;
     if (Ipv4ToInt(arg1,&Adresse)!=-1) /* IP ligne valide ? */
     {
      char Buf[30] ;
      Ipv4ToS(Adresse,Buf) ;
      fprintf(stderr,"L'adresse est la suivante %s.\n", Buf  ) ;
     }
     else
         {
          fprintf(stderr,"Adresse IP 1  non valide \n") ;
          return(0) ;
         }
     if (Ipv4ToInt(arg2,&Masque)!=-1) /* IP ligne valide ? */
         {
          char Buf[30] ;
          Ipv4ToS(Masque,Buf) ;
          fprintf(stderr,"L'adresse est la suivante %s.\n", Buf  ) ;
          }
     else
         {
          fprintf(stderr,"Masque IP  non valide \n") ;
          return(0) ;
         }
     /*  RechercheInterface(arg3,g->NomInterface ,g->NbrLignes ,&Ligne ) */
     pI = RechercheInterfaceNom(arg3,g->pI) ;
     
     if ( pI!=NULL )
        {
         Ligne = ObtenirLigne(pI) ;
         printf("Interface valide %d\n",Ligne) ;
         
        }
     else
         {
          printf("Interface non valide \n") ;
          return(0) ;
         }
    if (Ipv4ToInt(arg4,&Gateway)!=-1) /* IP ligne valide ? */
         {
          char Buf[30] ;
          Ipv4ToS(Gateway,Buf) ;
          fprintf(stderr,"L'adresse est la suivante %s.\n", Buf  ) ;
          }
      else
         {
          fprintf(stderr,"Gateway non valide \n") ;
          return(0) ;
         }
     AjoutEntreeTableRoutage(g->TableRoutage,Adresse, Ligne,Gateway,Masque,& (g->NbrEntrees)) ;
     return(1) ;
}
コード例 #13
0
ファイル: ser.c プロジェクト: bendem/DossierReseau
int main(int argc, char *argv[])
{
 int rc;
 int Desc;
 struct sockaddr_in psoo; /* o = origine */
 struct sockaddr_in psos; /* s = serveur */
 struct sockaddr_in psor; /* r = remote */

 int tm;
 struct Requete UneRequete;
 char Tampon[40];
 int Ip, Port;

 memset(&psoo, 0, sizeof(struct sockaddr_in));
 memset(&psos, 0, sizeof(struct sockaddr_in));
 memset(&psor, 0, sizeof(struct sockaddr_in));

 printf("Ceci est le serveur\n");
 if (argc!=3)
 {
  printf("ser ser port \n");
  exit(1);
 }

 Desc = CreateSockets(&psoo, NULL, argv[1], atoi(argv[2]), NULL, 0);
 if (Desc == -1)
    perror("CreateSockets");
 else
    printf(" CreateSockets : %d \n", Desc);

 while(1)
 {
  tm = sizeof(struct Requete);
  rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor);
  if (rc == -1)
    perror("ReceiveDatagram");
  else
     fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message);
  /***********************************************************************
  int	Ipv4ToInt(char *s, int *ip);
  void	Ipv4ToS(int ip, char *s);
  int GetIP(struct sockaddr_in *pin);
  int GetPort(struct sockaddr_in *pin);
  ***********************************************************************/


  Ip = GetIP(&psor);
  Port = GetPort(&psor);
  memset(Tampon, 0, sizeof(Tampon));
  Ipv4ToS(Ip, Tampon);

  printf("Adresse Ip du client %s : Port %d \n", Tampon, Port);
  /* reponse avec psor qui contient toujours l'adresse du dernier client */

  UneRequete.Type = Reponse;
  strcat(UneRequete.Message, " Client");
  rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psor);
  if (rc == -1)
    perror("SendDatagram:");
  else
    fprintf(stderr, "bytes:%d\n", rc);
 }
}
コード例 #14
0
ファイル: cli.c プロジェクト: bendem/DossierReseau
int main(int argc, char *argv[])
{
 int rc;
 int Desc;
 int tm;
 int Port, Ip;
 char Tampon[80];
 int returned_from_longjump;
 unsigned int time_interval;
 int ret;
 int Compteur = 0;

 struct sockaddr_in psoo; /* o = origine */
 struct sockaddr_in psos; /* s = serveur */
 struct sockaddr_in psor; /* r = remote */
 struct Requete UneRequete;
 char *pret;

 memset(&psoo, 0, sizeof(struct sockaddr_in));
 memset(&psos, 0, sizeof(struct sockaddr_in));
 memset(&psor, 0, sizeof(struct sockaddr_in));

 if (argc!=5)

{
    printf("cli client portc serveur ports\n");
    exit(1);
 }
 Desc = CreateSockets(&psoo, &psos, argv[1], atoi(argv[2]), argv[3], atoi(argv[4]));
 if (Desc == -1)
    perror("CreateSockets:");
 else
    fprintf(stderr, "CreateSockets %d !!!!\n", Desc);

  Ip = GetIP(&psoo);
  Port = GetPort(&psoo);
  memset(Tampon, 0, sizeof(Tampon));
  Ipv4ToS(Ip, Tampon);
  printf("Adresse Ip du client %s : Port %d \n", Tampon, Port);

 Compteur = 0;
 printf(" GetPid %d \n", getpid());
 while(1)
 {
   /* ici setjmp */
   returned_from_longjump = sigsetjmp(env, 1); /* <> 0 pour sauver le masque, ne surtout pas utiliser setjmp */
   if (returned_from_longjump!= 0)
     switch (returned_from_longjump)	 {
	case SIGINT:
	     printf("longjumped from interrupt %d\n", SIGINT);
	     exit(0);
	     break;
	case SIGALRM:
	     printf("longjumped from alarm %d\n", SIGALRM);
	     printf("Alarme numero %d \n", NbrAlarmes);
	     if (NbrAlarmes==4)
	         exit(0);
	     break;
     };

  signal(SIGINT, signal_handler);
  signal(SIGUSR1, signal_handler);
  signal(SIGALRM, signal_alarm);

   UneRequete.Compteur = Compteur;
   UneRequete.Type = Question;
   strncpy(UneRequete.Message, "Hello Multiclient", sizeof(UneRequete.Message));
   rc = SendDatagram(Desc, &UneRequete, sizeof(struct Requete), &psos);
   fprintf(stderr, "Turlututu \n");
   if (rc == -1)
      perror("SendDatagram");
   else
      fprintf(stderr, "Envoi du message %d avec %d bytes\n", UneRequete.Compteur, rc);

   memset(&UneRequete, 0, sizeof(struct Requete));
   tm = sizeof(struct Requete);

   time_interval = 5;
   ret = alarm(time_interval);
   // signal(SIGALRM, signal_alarm);
   tm = sizeof(UneRequete);
   printf("Ecoute sur le descripeur %d \n", Desc);
   rc = ReceiveDatagram(Desc, &UneRequete, tm, &psor);
   fprintf(stderr, "raison:%d \n", rc);
   pret = strerror(errno);
   fprintf(stderr, "Message est : %s \n", pret);
   ret = alarm(0);
   if (rc == -1)
   {
       perror("ReceiveDatagram");
   }
   else
   {
      fprintf(stderr, "bytes:%d:%s\n", rc, UneRequete.Message);
   }
   Compteur++;
   sleep(5);
 }

 close(Desc);
}
コード例 #15
0
ファイル: ser.c プロジェクト: RaphaelJ/Cours-2e-annee
int main(int argc,char *argv[])
{
 int rc ;
 struct Physique L ; /* pour eviter un bug curieux !!!!!!!*/
 int tm ;
 int HLs[100] ;
 int HEs[100] ;
 char Buffer[50] ;
 int HL,HE ;
 int descphys ;
 static struct gEvenement gEv ;
 int IPR,PORTD ;


 bzero(&L,sizeof (struct Physique)) ;
 bzero(HLs, sizeof(HLs )) ;
 bzero(HEs, sizeof(HEs)) ;

 printf("Ceci est le serveur\n") ;
 if ( argc!=3)
 {
  printf("ser ser port \n") ;
  exit(1) ;
 }

 descphys = CreerConnexion(&L,argv[1],atoi(argv[2]),NULL,0) ;
 if ( descphys == -1 )
    perror("CreerLiaison:") ;
 else
    printf("Liaison Cree \n") ;

 HLs[descphys]=1 ;
 HLs[0] = 1 ;

 rc = PrepareEvenement(&gEv,HLs,HEs,100,300,0 ) ;
 if ( rc== -1 )
    perror("PrepareEvenement:") ;

 while(1)
 {
  rc = AttendreEvenement(&gEv,&HL,&HE) ;
  if ( rc == -1 )
     perror("AttendreEvenement:") ;
  else
     printf("Event:%d\n",HL) ;
  if ( HL == 0 )
     {
      char Buffer[100] ;
      fgets(Buffer,sizeof Buffer,stdin) ;
      Buffer[strlen(Buffer)]=0 ;
      printf("La touche enfoncee est %s \n",Buffer) ;
      sleep(10) ;
     }
  if ( HL == descphys )
  {
   struct Message Msg ;
   tm = sizeof(struct Message) ;
   rc = OrigineCouchePhysique(&L,&Msg,&tm ) ;
   if ( rc == -1 )
      {
       perror("OrigineCouchePhysique") ;
       return(-1) ;
      }
   else
      printf("bytes:%d:%d + %d : %s\n",rc,Msg.Entier1,Msg.Entier2,Msg.Commentaire ) ;

   IPR=IPDistante(&L)    ;
   PORTD=PortDistant(&L) ;
   Ipv4ToS(IPR, Buffer) ;
   printf("IP distante %s Port Distant %d \n",Buffer,PORTD ) ;

   /* calcul de la r�onse */
   Msg.Resultat = Msg.Entier1 + Msg.Entier2 ;
   rc = Repondre(&L,&Msg,sizeof(struct Message)) ;
   if ( rc == -1 )
      {
       perror("OrigineCouchePhysique") ;
       return(-1) ;
      }
    else
       printf("bytes ecrits :%d\n",rc ) ;
   }
 }
}
コード例 #16
0
ファイル: routeur.c プロジェクト: RaphaelJ/Cours-2e-annee
void CoucheLiaison(struct Global *g)
{
 int rc ;
  /* static char Buffer[TBUFFERTRAME] ; */
 
 static struct Trame UneTrame ;
 static int Numero = 0 ;
 int NL ;
 int EHL,EHE ;
 int MacD ;
 
// Ancienne Position de PrepareEvenement
 
 while(1)
 {
  rc = PrepareEvenement( &(g->gEv),g->HandleL,g->HandleE,100,300,0 ) ;
  /* on s'endort en attendant que quelque chose se produise */
  printf(">>>") ; fflush(stdout) ;
  rc = AttendreEvenement(&(g->gEv),&EHL,&EHE) ;
  printf("Liaison:EHL %d\n",EHL) ;
  if ( rc == 0 )
     printf("Liaison:Timeout !!!!!\n") ;
  else
  if ( rc == -1 )
     {
      printf("Liaison:Erreur attendre Evenement !!!\n") ;
      exit(0) ;
     }
  else
     if ( EHL == 0 ) /* Frappe du clavier */
     {
             char Chaine[200] ;
             fgets(Chaine,sizeof Chaine,stdin ) ;
             Interpreteur(Chaine,g) ;
     }
     else
        if ( EHL != 0 ) /* evenement reseau */
        {
	 
         int tm=sizeof(UneTrame)  ;
	 struct Interface *pUneI  ; 

	 pUneI=RechercheInterfaceDesc( EHL,g->pI) ;
         if ( pUneI == NULL )
            	{
             	 fprintf(stderr,"Liaison: Pas d'interface pour evenement %d\n",EHL ) ;
		 exit(0) ;
		}
	 else
	    fprintf(stderr,"l'interface a ete trouvee \n") ;
         rc = OrigineCouchePhysique(ObtenirPhys(pUneI),&UneTrame,&tm) ;
         /* memcpy(Buffer,UneTrame.Buffer,sizeof Buffer) ; */
         fprintf(stderr,"Liaison:%d bytes lus\n",rc) ;
         /* Pour simplifier le code : la mac = IP */
         NL = ObtenirLigne(pUneI) ;
	 
	 if ( UneTrame.MacDestination.Numero == ObtenirIP(pUneI) )
	 {	 
          	rc = CoucheReseau(RECEPTION,UneTrame.Buffer,sizeof (UneTrame.Buffer),&NL,g,&MacD) ;  
	 }		
	 else
            {
             char TamponSource[30] ;
             char TamponDest[30] ;

            bzero(TamponDest,sizeof(TamponDest)) ;
            bzero(TamponSource,sizeof(TamponSource)) ;
            Ipv4ToS(UneTrame.MacSource.Numero,TamponSource) ;
            Ipv4ToS(UneTrame.MacDestination.Numero,TamponDest) ;
             
            fprintf(stderr,"Liaison:La mac recue ne correspond pas  Source FF:%s , dest FF:%s  \n",TamponSource ,TamponDest) ;
            /* Ajouter ici La mac source */
            fprintf(stderr," Le paramêtre gateway de l'émetteur est sans doute faux \n") ;
           }		 
        }
     else
        printf("Non connu !!!!!\n") ;
  /* faut il emettre une trame sur une ligne */
  if ( rc == ROUTAGE || rc==ENVOI )
     {
      char Buffer[20] ;
	struct Interface *pUneI ; 
     
       bzero(Buffer,sizeof(Buffer)) ;
      /*---- On r�crit vers l'interface correspondante ----*/
      UneTrame.MacDestination.Constructeur = 0xFF ;
      UneTrame.MacDestination.Numero = MacD ; /* je n'ai pas implement�arp */
      Ipv4ToS(UneTrame.MacDestination.Numero,Buffer ) ;
      fprintf(stderr,"Liaison;FF:%s\n",Buffer);
      fprintf(stderr,"Liaison: La Ligne de Sorite  est %d \n",NL ) ;
      pUneI = RechercheInterfaceLigne(NL,g->pI) ;
      if ( pUneI == NULL )
          {
           fprintf(stderr,"Liaison: Cette ligne n'existe pas !!!\n") ;
	   exit(0) ;
          }
      rc = VersCouchePhysique(ObtenirPhys(pUneI),&UneTrame,sizeof(UneTrame)) ;
      if (rc == -1 )
          perror("Motif:") ;
      else
          fprintf(stderr,"Liaison: %d bytes �rits vers FF:%s\n",rc,Buffer) ;
     }
 }
}
コード例 #17
0
ファイル: routeur.c プロジェクト: RaphaelJ/Cours-2e-annee
int CoucheReseau(int ev,char Buffer[],int tBuffer,int *Ligne,struct Global *g,int *MacD)
{
 static int Numero ;
        int res ;
 struct Paquet  *pp ;
 struct Segment *ps ;
 int	LigneEntree ;
 int    Regle ;
 static int IPS ;
 static int IPD ;
 char Buffer1[30], Buffer2[30] ;
 struct Interface *pUneI ;

 fprintf(stderr,"Reseau:Debut\n") ;
 switch(ev)
 {
  case MENU:
  case RECEPTION:
        LigneEntree = *Ligne ;
        fprintf(stderr,"Ligne Entree %d \n",LigneEntree) ;
        pp = (struct Paquet*) Buffer ;
        Ipv4ToS(pp->IPSource,Buffer1 ) ;
	Ipv4ToS(pp->IPDestination,Buffer2 ) ;
        fprintf(stderr,"Reseau:%s %s %d\n",Buffer1,Buffer2,
                pp->Numero ) ;
	/* *Ligne contient l'interface par laquelle on rentre */
        pUneI = RechercheInterfaceLigne(*Ligne,g->pI) ;
        if ( pUneI == NULL )
           {
            fprintf(stderr,"Pas d'interface pour la ligne %d!",LigneEntree) ;
            exit(0) ;
           }
        
         if (FiltragePaquet(LigneEntree,g->TableFiltrage,g->NbrRegles,pp,&Regle))
	    {
	         res = NEAN ;
		 fprintf(stderr,"Filtrage :Reseau Regle: %d DROP Ligne entree:%d ", Regle ,LigneEntree ) ;
	         fprintf(stderr,"IPS: %s IPD: %s ",Buffer1,Buffer2 ) ;
	         ps = ( struct Segment * ) pp->Buffer ;
	         fprintf(stderr,"Port Source: %d Port Destination: %d ",ps->PortSource ,ps->PortDestination ) ;
	         fprintf(stderr,"\n") ;
             }
          else
	     {
              /* Il faut traiter les paquets non filtré */
               /* Chercher une interface pingée         */
               pUneI = g->pI ;
               while( pUneI)
               {
                fprintf(stderr,"Reseau: Recherche d'interface pingee\n");
                if  ( pp->IPDestination == ObtenirIP(pUneI))
                  {
                   /* traiter ici le ping */
                   int *Code ;
                   Code =(int*)  pp->Buffer ;
                   if ( *Code == ICMPECHO )
                      {
                       int tempo ;
                       fprintf(stderr,"Reception ICMP ECHO et generation ICMP Response \n") ;
                       tempo = pp->IPSource ;
                       pp->IPSource = pp->IPDestination ;
                       pp->IPDestination = tempo ;
                       *Code = ICMPRESPONSE ;
                       break ;
                      }  
                    }
                  pUneI = InterfaceSuivante(pUneI) ;
                 }
                 *Ligne = Routage(g->TableRoutage,g->pI,g->NbrEntrees,pp->IPDestination,MacD) ;
	        // A verifier seule la ligne de sortie est bonne Paramêtre Regle , ligne entrée pas bon 
		fprintf(stderr,"Routqge Regle: %d  ACCEPT Lin %d Lout: %d ",Regle, LigneEntree,*Ligne ) ;
	         fprintf(stderr,"IPS: %s IPD: %s ",Buffer1,Buffer2 ) ;
	         ps = ( struct Segment * ) pp->Buffer ;
	         fprintf(stderr,"Port Source: %d Port Destination: %d ",ps->PortSource ,ps->PortDestination ) ;
	         fprintf(stderr,"\n") ;
                 if (*Ligne) /* Une ligne valide est fournie */
                    res = ROUTAGE ;
                 else
                    res = NEAN ;
	     }
        break ;
  default:
       res = NEAN ;
       break ;
  }
 fprintf(stderr,"Reseau:Fin\n") ;
 return res ;
}
コード例 #18
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
enum Evenements CoucheReseau( enum Evenements ev,char Buffer[],int tBuffer,struct Global *g)
{
 static int Numero ;
        int res ;
 struct Paquet *pp ;
        int IPDestination  ;
 int IPD ;
 int Protocole ;

 /********************* Phase Montante *******************************************************/
 fprintf(stderr,"Reseau:Debut\n") ;
 redo:
 pp = (struct Paquet *) Buffer ;
 switch(ev)
 {
  
  case MENU:
  case RECEPTION:
       {
        char Buffer1[30], Buffer2[30] ;
        Ipv4ToS(pp->IPSource,Buffer1 ) ;
        Ipv4ToS(pp->IPDestination,Buffer2 ) ;
        fprintf(stderr,"Reseau:%s:%s: %d  \n",Buffer1,Buffer2,pp->Numero) ;
        if ( pp->IPDestination == g->IPInterface )
	   {
             Protocole = pp->Protocole ;
	     if ( Protocole == ICMP )
                {
                 int *code ;
                 code = (int * ) pp->Buffer ;
                 if ( *code == ICMPRESPONSE )
                    {
                     fprintf(stderr,"Reseau: Reception ICMPRESPONSE \n") ;  
		     res = CoucheTransport(RECEPTIONICMP,pp->Buffer,sizeof(pp->Buffer),&Protocole,pp->IPSource,&IPDestination,g) ;
                    }
                 else
                    if (*code == ICMPECHO )
                        {
                         fprintf(stderr,"Reseau: Reception ICMPECHO et generation ICMP RESPONSE \n") ;
                         /* Generation de la reponse */
                         *code = ICMPRESPONSE ;
                         IPDestination = pp->IPSource ;
                         Protocole = ICMP ;
                         res = ENVOI ;      
                        }
                     else
                        {
                          fprintf(stderr,"Reseau: Code ICMP Inconnu \n") ;
                          res = NEAN ;
                        }       
                } 
             else 	   
                res = CoucheTransport(ev,pp->Buffer,sizeof(pp->Buffer),&Protocole,pp->IPSource,&IPDestination,g) ;
	}  
        else
	  {
           printf("Reseau:Adresse de destination non connue \n") ;
           res = NEAN ;
	  }
       }
        break ;
  default:
         res = NEAN ;
  }
  fprintf(stderr,"reseau:phase descendante\n") ;
 switch(res)
 {
   case ENVOI:
       {
        res = GenerationPaquet(pp,IPDestination,Protocole,pp->Buffer, g ) ;
        if (res==RECEPTION  )
           { 
             ev = res ;
             goto redo;
           }
         break ;
        }
    case NEAN:
              break ;
    default:
              fprintf(stderr,"Reseau: Option non reconnue\n") ;
              break ;
 }
 fprintf(stderr,"Reseau:Fin\n") ;
 return res ;
}
コード例 #19
0
ファイル: unpc.c プロジェクト: RaphaelJ/Cours-2e-annee
void CoucheLiaison(struct Global *g)
{
 int rc ;
 enum Evenements rce ;
 static char Buffer[TBUFFERTRAME] ;
 
 static struct Trame UneTrame ;
 int EHL,EHE ;
 int Redo = 1 ;

 while(Redo)
 {
  if (g->WaitReceive )
        g->HandleL[0] = 0 ; /* En Mode WaitReceive le clavlier est désactivé */
  else
     g->HandleL[0] = 1 ;
  rc = PrepareEvenement( &(g->gEv),g->HandleL,g->HandleE,100,300,0 ) ;
  /* on s'endort en attendant que quelque chose se produise */
  if (!VericationParametreTransport(g) )
     printf("ENCODEZ VOS PARAMETRES DE TRANSPORT !!!!!\n") ;
  printf(">>>");fflush(stdout);
  rc = AttendreEvenement(&(g->gEv),&EHL,&EHE) ;
  fprintf(stderr,"Liaison:EHL %d\n",EHL) ;
  if ( rc == -1 )
     {
      printf("Liaison:Erreur attendre Evenement \n");
      exit(0) ;
     }
  else
  if ( rc == 0 )
      printf("Liaison:Timeout!!!!\n") ;
  else
     {
      /* gestion de l'evenement */	     
      if ( EHL == 0 ) /* Frappe du clavier */
        {
          /* appel à l interpreteur */
          char Chaine[50] ;
          fgets(Chaine,sizeof(Chaine),stdin) ; /* Evitez le getchar() !!!!! */
          Chaine[strlen(Chaine)-1]=0 ; /* On supprime le newline */
	  fprintf(stderr,"La touche press� est %s \n",Chaine) ;
          rc = Interpreteur( Chaine, g) ;
                if ( rc==0 )
                   {
                    fprintf(stderr,"erreur de Syntaxe \n") ;
                    printf("erreur de Syntaxe \n") ;
                   }
        }
      else
        if ( EHL != 0 ) /* evenement reseau */
        {
         int tm=sizeof(UneTrame) ;

         /* Corriger ici */
         if ( g->WaitReceive)
 	    {
              Redo = 0 ;
              g->WaitReceive = 0 ;
            }
         rc = OrigineCouchePhysique(&(g->TPhys),&UneTrame,&tm) ;
         memcpy(Buffer,UneTrame.Buffer,sizeof(UneTrame.Buffer)) ;
         fprintf(stderr,"Liaison::%d bytes lus\n",tm) ;
         if (UneTrame.MacDestination.Numero== g->IPInterface )
            {
             rce = CoucheReseau(RECEPTION,Buffer,sizeof Buffer,g) ;
            }
          else
             {
              char BufferIP[20] ;
              Ipv4ToS(UneTrame.MacDestination.Numero,BufferIP ) ;
              fprintf(stderr,"Liaison la mac n'est pas bonne FF:%s \n",BufferIP) ;
              rce=NEAN ;
             }
        }
      else
        printf("Non connu !!!!!\n") ;

      /***En envoi de la trame *******************************************/
      if ( rce == ENVOI ) /* Bug si mauvaise position */
         {
          rc = GenerationTrame(&UneTrame,Buffer,g ) ;
         }
    }
 }
};