Pages

cours réseaux informatique

touts sur les réseaux informatique.

Cours JAVA

les cours de java exemples exercices

RSS comment ça marche

RSS comment fonctionne

dimanche 15 janvier 2012

recherche dicotomie




#include<stdio.h>
#include<conio.h>
# define MAX 100

bool RecehrcheDEco(int T[MAX],int *deb,int *fin,int val,int *pos)
{
     if(fin<deb)  return 0;
     else if(val==T[(*fin+*deb)/2]){
          *pos =(*fin-*deb)/2;
          return 1;
          }
     else if(val<T[(*fin+*deb)/2]){
       *deb=((*deb+*fin)/2-1);
        return  RecehrcheDEco(T,deb,fin,val,pos);
          }
     else {
     *fin=((*deb+*fin)/2+1);
     return RecehrcheDEco(T,deb,fin,val,pos);
     }
     }
     main(){
 
    int T[MAX];
    int deb,fin,pos,val,i,n;
    printf("\n Entrée le nbres d'element : ");
    scanf("%d",&n);
    for(i=0;i<n;i++){
                     printf("\n entrer le %d ieme elements de Tableau",i);
                     scanf("%d",&T[i]);
                     }
    printf("\n donner la valeur a rechercher : ");
    scanf("%d",&val);
   deb=0;
   fin=n-1;
   if(RecehrcheDEco(T[100],&deb,&fin,val,&pos) == 1){
   printf("\n l'element se treouve a la position %i",&pos);
   else
   printf("\n l'elements n'existe pas dans les Tableau");
}
    getch();
    }


TP les types de trie en C


TP les types de trie en C 


#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
// tri par fusion
void fusion(int*t,int deb1,int fin1,int fin2)
{

int*table1;
int deb2=fin1+1;
int compt1=deb1;
int compt2=deb2;
int i;
table1=(int *)malloc((fin1-deb1+1)*sizeof(int));
for(i=deb1;i<=fin1;i++)
table1[i-deb1]=t[i];
for(i=deb1;i<=fin2;i++){
if( compt1==deb2) break;
else if (compt2==(fin2+1)) {

t[i]=table1[compt1-deb1];
compt1++;
}
else if(table1[ compt1- deb1] <t[ compt2]) {

t[i]=table1[compt1-deb1];
compt1++;
}
else{

t[i]=t[compt2];
compt2++;
}
}
free(table1);
}
void tri_fusion_T(int*t,int deb,int fin)
{
if(deb!=fin){
int milieu=( fin+deb) /2;

tri_fusion_T(t,deb,milieu);
tri_fusion_T(t,milieu+1,fin);
fusion(t,deb,milieu,fin);
}
}
void tri_fusion(int*t,int n)
{
if (n>0) tri_fusion_T(t,0,n-1);
}

// tri en bulle
void tri_en_bulle(int *t, int n)
{

int j =0 ;
int tmp =0;
int en_desordre =1;
while(en_desordre)
{
en_desordre = FALSE;
for(j =0 ; j < n-1 ; j++)
{
if(t[j] > t[j+1])

{
tmp = t[j+1];
t[j+1] = t[j];
t[j] = tmp;
en_desordre = TRUE;
}
 }
   }
    }
// tri par sélection
void tri_par_selection(int*t, int n)
{
int i, min, j , tmp;
for(i =0 ; i < n -1 ; i++)
{
min = i;
for(j = i+1 ; j < n ; j++)
if(t[j] < t[min])
min = j;
if(min != i)

{
tmp = t[i];
t[i] = t[min];
t[min] = tmp;
}
   }
      }



// tri par insertion
void tri_insertion(int*t, int n)
{
int i, p,j;
int x;
for (i =1; i < n; i++)
{
x = t[i];
p = i-1;
while (t[p] > x && p-- >0) {}
p++;
for (j = i-1; j >= p; j--) {
t[j+1] = t[j];
}
t[p] = x;
 }
   }


// tri rapide
void echanger (int*t, int i, int j)
{int tmp;

tmp=t[i];
t[i]=t[j];
t[j]=tmp;
}
int partition(int*t, int deb, int fin)
{

int compt=deb;
int pivot=t[ deb] ;
int i;
for(i=deb+1;i<=fin;i++){
if(t[i]<pivot){

compt++;
echanger(t,compt,i);
}
}
echanger(t,compt,deb);
return(compt);
}
void tri_rapide_T (int*t, int debut,int fin)

{
    if(debut<fin)
{
int pivot=partition( t,debut, fin) ;
tri_rapide_T(t,debut,pivot-1);
tri_rapide_T(t,pivot+1,fin);
}
   }
void tri_rapide(int*t,int n)
{
    tri_rapide_T(t,0,n-1);
}

int main(void)
{

int nb_entiers;
int*tab;
int i;
int num;


printf("Donner le nombre des entiers que vous voulez trier: ");
scanf("%d",&nb_entiers);


tab=(int *)malloc(nb_entiers*sizeof(int));


printf("\n");
for(i=0;i<nb_entiers;i++){

printf("Donner l'entier %d: ",i+1);
scanf("%d",&tab[i]);
}


printf("1. Le tri par fusion\n");
printf("2. Le tri en bulle\n");
printf("3. Le tri par selection\n");
printf("4. Le tri par insertion\n");
printf("5. Le tri rapide\n");
printf("entrer votre choix: \n");
int cas;
scanf("%d",&cas);

while(cas!=0){

// appliquer l'algorithme choisi

if(cas==1){ tri_fusion(tab,nb_entiers);
printf("\n tries! : ",144);
for(i=0;i<nb_entiers;i++) printf("%3d",tab[i]);
printf("\n\n");}
if(cas==2) {tri_en_bulle(tab,nb_entiers);
printf("\n tries! : ",144);
for(i=0;i<nb_entiers;i++) printf("%3d",tab[i]);
printf("\n\n");}
if(cas==3) {tri_par_selection(tab, nb_entiers);
printf("\n tries! : ",144);
for(i=0;i<nb_entiers;i++) printf("%3d",tab[i]);
printf("\n\n");}
if(cas==4) {tri_insertion(tab,nb_entiers);
printf("\n tries! : ",144);
for(i=0;i<nb_entiers;i++) printf("%3d",tab[i]);
printf("\n\n");}
if(cas==5) {tri_rapide(tab,nb_entiers);
printf("\n tries! : ",144);
for(i=0;i<nb_entiers;i++) printf("%3d",tab[i]);
printf("\n\n");}
cas=0;
printf("1. Le tri par fusion\n");
printf("2. Le tri en bulle\n");
printf("3. Le tri par selection\n");
printf("4. Le tri par insertion\n");
printf("5. Le tri rapide\n");
printf("entrer votre choix: \n");
int cas;
scanf("%d",&cas);
}
system("PAUSE");
return 0;
}

samedi 14 janvier 2012

TP serveur de messagerie postfix (3 Tests)




·       Tests:

Vous pouvez envoyer un mail en ligne de commandes :
D'abord vers votre domaine, puis vers un domaine extérieur :
Envoyer un message à gi2011
sendmail gi2011@isra.gi.edu
/etc/init.d/postfix  start
 * Starting Postfix Mail Transport Agent postfix      

gi2011@m1:/etc/courier$ mail gi2011@isra.gi.edu
Cc:
Subject: bsr
Salut  tt le monde .

gi2011@m1:/etc/courier$ mutt gi2011@isra.gi.edu
gi2011@m1:/etc/courier$ mail
"/var/mail/gi2011": 3 messages3 nouveaux
>N   1 root               jeu. mars 31 17:  19/417   salut
 N   2 gi2011             jeu. mars 31 17:  18/520   salut
 N   3 gi2011             jeu. mars 31 18:  16/520   ccc
? p1
Return-Path: <root@m1.isra.gi.edu>
X-Original-To: gi2011@isra.gi.edu
Delivered-To: gi2011@isra.gi.edu
Received: by m1.gi.edu (Postfix, from userid 0)
            id 109447DF8; Thu, 31 Mar 2011 17:47:13 +0000 (WET)
To: <gi2011@isrb.gi.edu>
Subject: salut
X-Mailer: mail (GNU Mailutils 2.1)
Message-Id: <20110331174713.109447DF8@m1.gi.edu>
Date: Thu, 31 Mar 2011 17:47:13 +0000 (WET)
From: root@m1.isra.gi.edu (root)
Salut tt le monde



·       Commandes d’administration :
Lister la queue de mails en attente d'envoi :
mailq
ou
postqueue -p
Forcer Postfix à réessayer d'envoyer les mails en attente d'envoi immédiatement :
postqueue -f
Supprimer un mail de la queue des mails en attente d'envoi :
postsuper -d <n°>

TP installation de serveur de messagerie postfix(2)


  •         Postfix :



·        Installation :

Postfix va envoyer et recevoir les mails de votre domaine. Pour l'installer, vous pouvez utiliser la
commande :
# apt-get install postfix
A l'installation il vous est demandé :
– quel type de configuration vous souhaitez, choisissez site internet.
– Quel utilisateur doit recevoir les mails du root, choisissez mrim
– Laissez les domaines tels qu'ils vous sont proposés.
– Pour les mises à jour synchronisées, choisissez Oui.

·        Configuration :

La configuration de ce serveur SMTP se fait au moyen de plusieurs fichiers de configuration.
Celui qui nous intéresse particulièrement est : /etc/postfix/main.cf :
Sauvegarder le fichier /etc/postfix/main.cf par la
commande :
#cp /etc/postfix/main.cf /etc/postfix/main.cf.old
après vider le fichier /etc/postfix/main.cf par la
commande:
# echo > /etc/postfix/main.cf
Éditer le fichier /etc/postfix/main.cf et copier dedans
ceci:
# See /usr/share/postfix/main.cf.dist for a
commented, more complete version
# Debian specific: Specifying a file name will cause
the first
# line of that file to be used as the name. The Debian
default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name
(Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed
mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-
snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-
snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database =
btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database =
btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README
the postfix-doc package for
# information on enabling SSL in the smtp cl
myhostname = isr.gi.edu
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = gi.edu, localhost,
localhost.localdomain, localhost
relayhost =
mynetworks = 172.16.0.0/16 127.0.0.0/8
[::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 10240000
/etc/postfix/main.cf 1,1 Haut
redémarrer le serveur par la commande :
#/etc/init.d/postfix stop
#/etc/init.d/postfix start
Pour voir si le fichier main.cf  ne comprend pas d'erreur, on tape la commande
tail /var/log/syslog et on repère les lignes des fichiers dans lesquelles il y a des erreurs.
tail -f /var/log/syslog
tail -f /var/log/mail.
mail.err   mail.info  mail.log   mail.warn 
-f /var/log/mail.info
Mar 31 16:09:11 m1 postfix/master[2818]: daemon started -- version 2.7.0, configuration /etc/postfix


TP installation de serveur de messagerie postfix



Introduction:

Postfix est entièrement libre.
Il a été écrit entièrement par Wietse Venema qui travaillait à l'époque, pour IBM.
● Postfix peut fonctionner sur PC, sur mac ou sur toute autre plateforme compatible avec
   unix ou linux.
● Il n'existe pas de version windows.
Postfix est un serveur SMTP. Donc pour faire un serveur de courrier complet, il lui faut un adjoint pour le transport des messages chez l'utilisateur final en POP3 ou en IMAP.
Le protocole SMTP c'est : single mail transfert protocol. C'est le protocole qui permet d'envoyer et de récupérer les courriers sur Internet en fonction du nom de domaine.
Pour sa réception, en fonction du nom d'utilisateur, nous évoquerons courrier et cyrus

  •    Présentation 


  Avant tout, il faut bien comprendre comment fonctionnent l'envoi et la réception de mails.

Pour envoyer mail on utilise un ogiciel qui permet de transporter les messages, on appelle
cela un MTA (Mail Transfert Agent). Enpratique c'est le protocole SMTP qui s'en charge, les MTA les plus connus étant Sendmail,Postfix sous Unix et Exchange sous Windows)
Une fois les messages arrivés à destination, le MDA (Mail Delivery Agent) dépose chaque
message dans la bonne boite aux lettres. En pratique, c'est les protocoles POP ou IMAP qui s'en chargent. Sous Linux, Procmail est très utilisé, tandis que sous Windows, on utilise plutôt
Exchange.
Côté client, on utilise un logiciel qui permet de consulter sa boite aux lettres, que l'on
appelle MUA (Mail User Agent). Les plus connus sont Outlook ou Thunderbird.
Pour ce TP, nous avons donc besoin côté serveur d'un MTA (Postfix) et d'un MDA
(Qpopper). Il est rare de gérer un serveur mail sans solutions de protection contre les spams et les virus, c'est pourquoi nous verrons aussi spamassassin et clamwin.




Activation de RIP sur les routeurs(3)




2.2 Activation de RIP sur le routeur 1 :

Afin d'observer la diffusion des routes qu'opère RIP, je vous propose de saisir la commande suivante dans le shell d'un routeur immédiatement voisin de R1, R2 par exemple :

R2 # tcpdump -i eth1 -nt -s 0 src net 172.16.0.0
tcpdump: listening on eth1
Ensuite, connectons-nous au routeur RIP sur R1 avec un telnet sur le port 2602. Dans le shell de R1

 :
R1 # telnet localhost 2602
 
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
 
Hello, this is zebra (version 0.91a).
Copyright 1996-2001 Kunihiro Ishiguro.
 
 
User Access Verification
 
Password:
 
R1(RIP) >


Cette opération étant réalisée, comme pour zebra il faut activer le mode privilégié, passer dans le terminal 

de configuration et enfin, entrer dans la configuration du routeur RIP :
R1(RIP)> enable
R1(RIP)# conf t
R1(RIP)(config)# router rip
R1(RIP)(config-router)# version 2

La première tâche consiste à déterminer les types de routes en notre «possession» que nous souhaitons voir diffuser à nos voisins. Cette configuration se fait par la commande redistribute.
Nous choisissons de diffuser les adresses des réseaux directement connectés :

R1(RIP)(config-router)# redistribute connected

Pour l'instant, rien ne se produit. Il faut indiquer à RIP sur quels réseaux nous souhaitons voir la diffusion des routes s'opérer. Nous retrouvons ici une commande commune avec le routage statique. Avant de la valider, pensez à observer le résultat du tcpdump sur l'écran de R2 :

R1(RIP)(config-router)# network 172.16.0.0/16

À ce stade, R1 diffuse sur le réseau 172.16.0.0/16 la table RIP toutes les 30 secondes. Le résultat sur R2 doit ressembler à ceci :

R2 # tcpdump -i eth1 -nt -s 0 src net 172.16.0.0
tcpdump: listening on eth1
 
172.16.0.0.router > 224.0.0.9.router: RIPv2-req 24 (DF) [ttl 1]
 
172.16.0.0 > 224.0.0.9: igmp v2 report 224.0.0.9 (DF) [ttl 1]
 
172.16.0.0.router > 224.0.0.9.router: RIPv2-resp [items 2]:
{172.16.0.0/255.255.255.0}(1)
{192.168.1.192/255.255.255.0}(1) (DF) [ttl 1]

Les messages adressés par R1 se font via une adresse multicast convenue pour les routeurs RIP : 224.0.0.9. Les dernières lignes montrent clairement que RIP diffuse deux vecteurs de distance : un concernant le réseau 172.16.0.0/16 et un autre concernant le réseau 192.168.1.192/27. Observons sur R1 la table avec laquelle RIP travaille :






R1(RIP)(config-router)# end
R1(RIP)# show ip rip
Codes: R - RIP, C - connected, O - OSPF, B - BGP 
  Network            Next Hop         Metric From            Time
C 172.16.0.0/16                         1
C 172.16.0.0/16                         1
C 192.168.1.192/27                        1
 
R1(RIP)# 
 
 


RIP a été activé sur le réseau 172.16.0.0/16, donc aucune information le concernant n'est diffusée sur ce même réseau pour des raisons évidentes d'optimisation mais aussi, pour la gestion du problème de la convergence lente.

Activation de RIP sur le routeur 2 :
Bien, nous avons fait la moitié du travail. Un routeur diffuse grâce à RIP les informations de routage qu'il possède. Mais pour l'instant, c'est inefficace car personne n'est là pour les écouter et les exploiter. Il faut donc faire les mêmes manipulations sur R2 puis à terme sur R3. Passons dans le shell de R2 :



R2 # telnet localhost 2602
...
R2(RIP)> enable
R2(RIP)# conf t
R2(RIP)(config)# router rip
R2(RIP)(config-router)# redistribute connected
R2(RIP)(config-router)# network 172.16.0.0/16
R2(RIP)(config-router)# end
R2(RIP)# show ip rip
Codes: R - RIP, C - connected, O - OSPF, B - BGP 
  Network            Next Hop         Metric    From            Time
C 172.16.0.0/16                         1
C 172.16.0.0/16                         1
R 172.16.0.0/16        172.16.0.7       2      172.16.0.0      02:52
R 192.168.1.192/27     172.16.0.7       2      172.16.0.0      02:52
C 192.168.1.32/27                       1
 
R2(RIP)#

La table ci-dessus a été constituée par le processus RIP exécuté sur R2. Le routeur d'adresse 172.16.0.7(R1) l'a informé de la présence de deux routes vers deux réseaux, ce qui est conforme aux informations affichées par tcpdump tout à l'heure. La distance (Metric) est égale à deux puisque ces réseaux sont directement connectés à R1. Un compteur est activé pour chaque route dynamique notée R (pour RIP). C'est un compte à rebours qui périodiquement redémarre à 03:00 (soit 180 secondes ou 6 périodes de mise à jour de la table de routage) à chaque diffusion reçue de R1.
Vous pouvez lancer la commande show ip rip sur R1 afin de constater qu'il a effectué un travail similaire.



TP routage dynamique 2


        
        Configuration IP des machines :

Nous avons configuré nos machines pour utiliser des IP de la classe C. 192.168.1.x /27



Pour configurer les adresses IP sous Linux, nous avons utilisé la commande ifconfig :
$>ifconfig ethx  adresse_IP netmask  masque_de_sous_reseau up/down 
       ifconfig eth0 192.168.1.33  /27
      ifconfig eth1 172.16.0.4 /16
1.     Routage  dynamique avec RIPv1:
Le routage dynamique permet de nous éviter de rentrer les tables de routage à la main sur toutes les machines. Cela permet de gagner du temps lors de réseaux très important ou encore lors de changements dans la topologie des réseaux.
Pour la réalisation de ce TP, nous avons utilisé le protocole RIP v1 (Routing Information Protocol).
2.1.  Configuration
Vérifier l'installation des paquets quagga  avant de brasser les postes sur les commutateurs non programmés.
Vérifier que la fonction de routage des paquets IPv4 est active au niveau noyau.

cat /proc/sys/net/ipv4/ip_forward
1

Configuration de fichier /etc/quagga/zebra.conf avec le paquet Quagga
hostname R1(Zebra)
password routeur1
on va  également créer un fichier de configuration pour le routeur RIP (/etc/quagga/ripd.conf avec le paquet Quagga) ayant une apparence très proche du précédent :
hostname R1(Zebra)
password routeur1


Le fichier /etc/quagga/daemons spécifie la liste des démons à utiliser :

# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
#   0, "no"  = disabled
#   1, "yes" = highest priority
#   2 .. 10  = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION:
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though.
#
zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=yes
ripngd=no
isisd=no

Partager

Twitter Delicious Facebook Digg Stumbleupon Favorites More