[PERL]Réseaux

Salut,

j'aurai besoin d'aide concernant cet exo car j'ai du mal à comprendre comment il faut que je m'y prenne.
Si quelqu'un pouvait m'indiquer des pistes pour le démarrer ce serait sympa car je n'y arrive pas.

Merci par avance

Le but est de surveiller un certain nombre de services (en local ou en réseau) et de provoquer des actions en cas de d´efaillance d’un service.
Votre logiciel devra prendre en compte un fichier de configuration pour lequel vous utiliserez la syntaxe qui vous semblera la plus judicieuse ; une syntaxe vous est proposée, mais vous êtes libre de l’améliorer ou d’en changer complètement.
Le fichier de configuration devra permettre de configurer des paramétres généraux :Frequency(60) Surveillance toutes les 60 secondes
Mail.config(’mailetud’,’admin@foo.com’)Serveur et destinataire pour les courriels sortants
Database.config(’dbi:Pg:host=sqletud;dbname=maBaseAMoi’,’user’,’pass’)
Internet.ftpconfig(’serveur’,’user’,’pass’)

La configuration de votre moteur devra permettre de surveiller :
 • le système Linux sur lequel il est exécuté :
    System.disk(’hda3’,95) ou System.disk(’/home’,90) occupation disque
    System.process(’apache’) vérification de l’existence d’un processus
    System.cpuload(10) charge du processeur (faisable facilement ?)
 • des services réseau :
   Internet.ping(’192.168.0.10’) machine en vie ?
   Internet.tcp(’192.168.0.10’,’25’) port toujours ouvert ?
   Internet.url(’http://foo/bar’) existence d’une URL (idem en ftp)
   Internet.url(’http://foo/bar’,’/path/to/file’) contenu d’une page web
 • la base de données :
    Database.alive() base en fonctionnement ?
    Database.request(’select * from c where a>100’)
    teste la non existence de résultat ; erreur si des lignes sont renvoyées
   Voici les actions que le logiciel pourrait déclencher :
 • Action.mail(’sujet’,’texte’) envoi d’un courriel
 • Action.ftp(’/full/path/to/local/file’,’/pub/directory’) envoi d’un fichier
 • Action.database(’update c set a=10 where a>100’) commande SQL

Les combinaisons entre les tests et les actions se font ainsi : test => action. Par exemple :
Internet.ping(’192.168.0.10’) => Action.mail(’HS’,’Machine 192.168.0.10 HS’)
System.disk(’/home’,99) => Action.ftp(’/home/user/plein.html’,’/var/www/’)
Votre logiciel devra fonctionner en tâche de fond et déclencher les tests demandés à la fréquence demandée. Il effectura les actions demandées le cas échéant. Il écrira un journal de son activité (log)
sous la forme d’un fichier texte indiquant les tests faits et les actions entreprises.

56 réponses

Résumé de la discussion

Objectif de l’exercice : concevoir un démon de surveillance qui vérifie des services locaux ou réseau et déclenche des actions en cas de défaillance via un fichier de configuration. Des tests couvrent System.disk, System.process et System.cpuload, ainsi que des vérifications réseau comme Internet.ping, Internet.tcp et Internet.url, avec des actions possibles telles que Action.mail, Action.ftp et Action.database. Plusieurs exemples et configurations ont été discutés, notamment une syntaxe de fichier de config avec Frequency, Mail.config, Database.config et Internet.ftpconfig, ainsi que des scripts Perl exécutant le daemon et écrivant un journal. D'autres contributions évoquent des variantes telles que l’ajout de tests locaux et LAN, et soulignent l’intérêt de gérer le démarrage/arrêt et le stockage des logs pour la traçabilité.

Bobot (l’IA à votre service)
  1. Modérateur
    J'ai ajouté dans le fichier de configuration localhost et un ip depuis mon LAN

    1. le fichier de configuration
    # la frequence dont le daemon execute les testes
    # Ex : Frequenci NN  
    # frequency insensible à la case
    # NN nombre de secondes
    frequency 10
    
    # vérification de la connexion
    # faire un ping vers une machine (locale ou distante)
    local.ping localhost
    remote.ping 192.168.1.2
    
    2. le script modifié
    #!/usr/bin/perl
    use warnings;use strict;
    
    use POSIX;
    use Time::HiRes;
    use Net::Ping;
    
    my $ping = Net::Ping->new();
    my ($local,$remote);
    my $freq;
    my ($localhost,$remotehost);
    
    my $ip = qr/(?:\d{1,3}\.){3}\d{1,3}/;
    
    # fichier de configuration
    open CONFIG,"/etc/mon_daemon.conf"
       or die "E/S : $!\n";
    
    while (<CONFIG>){
    # on saute les commentaires
      next if /^#/;
    # je recupere la frequence
      $freq=$1 if /frequency\s*(\d+)/i;
    # je recupere l'hôte locale
      $localhost = $1 if /local\.ping\s*(\w+)/i;
    # je recupere l'hôte distante à vérifiier
      $remotehost = $1 if /remote\.ping\s*($ip)/i;
    }
    
    # exécution de script en tant que daemon
    # 
    my $pid=fork;
    exit if $pid;
    die "fork impossible : $!" unless defined($pid);
    
    POSIX::setsid()
        or die "Pas de nouvelle session : $!\n";
    
    my $kill_pid = 0;
    
    sub gestion_signaux {
        $kill_pid = 1;
    }
    
    $SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&gestion_signaux;
    
    # les taches que le daemon exécute
    # chaque 10 secondes il va écrire
    # dans /var/log/log.daemon
    # dans le format
    #jj/mm/yyyy hh:mm:ss   daemon fonctionne
    #jj/mm/yyyy hh:mm:ss   localhost en vie
    #   
    
    until ($kill_pid) {
    # calcule la date et l'heure du teste
    # pour affichage dans journal
      my ($s,$mm,$h,$j,$m,$y) = (localtime)[0..5];
      $j  = sprintf("%02d",$j);
      $m  = sprintf("%02d",$m +=1);
      $y +=1900;
      $s  = sprintf("%02d",$s);
      $mm = sprintf("%02d",$mm);
      $h  = sprintf("%02d",$h);
      my $date = "$j/$m/$y $h:$mm:$s";
    
      open DAEMON,">> /var/log/log.daemon"
         or die "E/S : $!\n";
    
      if ($ping->ping($localhost)){
         $local = "$date $localhost en vie";
      }
      if ($ping->ping($remotehost)){
         $remote = "$date $remotehost en vie";
      }
      print DAEMON "$date daemon fonctionne\n$local\n$remote\n"; 
      sleep($freq);
    }
    
    3. le journal /var/log/log.daemon
    02/11/2006 23:10:26 daemon fonctionne
    02/11/2006 23:10:26 localhost en vie
    02/11/2006 23:10:26 192.168.1.2 en vie
    02/11/2006 23:10:36 daemon fonctionne
    02/11/2006 23:10:36 localhost en vie
    02/11/2006 23:10:36 192.168.1.2 en vie
    02/11/2006 23:10:46 daemon fonctionne
    02/11/2006 23:10:46 localhost en vie
    02/11/2006 23:10:46 192.168.1.2 en vie
    02/11/2006 23:10:56 daemon fonctionne
    02/11/2006 23:10:56 localhost en vie
    02/11/2006 23:10:56 192.168.1.2 en vie
    02/11/2006 23:11:06 daemon fonctionne
    02/11/2006 23:11:06 localhost en vie
    02/11/2006 23:11:06 192.168.1.2 en vie
    lami20j
    1
    1. Modérateur
      Salut,

      voilà un début
      le script s'exécutera en tant que daemon
      il faut être root pour l'exécuter

      1. j'ai créer un fichier de configuration mon_daemon.conf dans /etc

      Voici le contenu
      # la frequence dont le daemon execute les testes
      # Ex : Frequenci NN  
      # frequency insensible à la case
      # NN nombre de secondes
      frequency 10
      

      2. le script daemon.pl
      Le daemon va écrire tous les 10 secondes dans /var/log/log.daemon
      jj/mm/yyyy hh:mm:ss daemon fonctionne
      jj/mm/yyyy hh:mm:ss localhost en vie
      #!/usr/bin/perl
      use warnings;use strict;
      
      use POSIX;
      use Time::HiRes;
      use Net::Ping;
      
      my $ping = Net::Ping->new();
      my $resultat;
      my $freq;
      
      
      # fichier de configuration
      open CONFIG,"/etc/mon_daemon.conf"
         or die "E/S : $!\n";
      
      while (<CONFIG>){
      # on saute les commentaires
        next if /^#/;
      # je recupere la frequence
        $freq=$1 if /frequency\s*(\d+)/i;
      }
      
      
      # exécution du script en tant que daemon
      # 
      my $pid=fork;
      exit if $pid;
      die "fork impossible : $!" unless defined($pid);
      
      POSIX::setsid()
          or die "Pas de nouvelle session : $!\n";
      
      my $kill_pid = 0;
      
      sub gestion_signaux {
          $kill_pid = 1;
      }
      
      $SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&gestion_signaux;
      
      # les taches que le daemon exécute
      # chaque 10 secondes il va écrire
      # dans /var/log/log.daemon
      # dans le format
      #jj/mm/yyyy hh:mm:ss   daemon fonctionne
      #jj/mm/yyyy hh:mm:ss   localhost en vie
      #   
      
      until ($kill_pid) {
      # calcule la date et l'heure du teste
      # pour affichage dans journal
        my ($s,$mm,$h,$j,$m,$y) = (localtime)[0..5];
        $j  = sprintf("%02d",$j);
        $m  = sprintf("%02d",$m +=1);
        $y +=1900;
        $s  = sprintf("%02d",$s);
        $mm = sprintf("%02d",$mm);
        $h  = sprintf("%02d",$h);
        my $date = "$j/$m/$y $h:$mm:$s";
      
        open DAEMON,">> /var/log/log.daemon"
           or die "E/S : $!\n";
      
        if ($ping->ping("localhost")){
           $resultat = "$date localhost en vie\n";
        }
        print DAEMON "$date daemon fonctionne\n$resultat"; 
        sleep($freq); 
      }
      3. le fichier /var/log/log.daemon
      02/11/2006 22:15:34 daemon fonctionne
      02/11/2006 22:15:34 localhost en vie
      02/11/2006 22:15:44 daemon fonctionne
      02/11/2006 22:15:44 localhost en vie
      02/11/2006 22:15:54 daemon fonctionne
      02/11/2006 22:15:54 localhost en vie
      02/11/2006 22:16:04 daemon fonctionne
      02/11/2006 22:16:04 localhost en vie
      02/11/2006 22:16:14 daemon fonctionne
      02/11/2006 22:16:14 localhost en vie
      Tu remarques que le résultat est enregistré toutes les 10 secondes
      dans le fichier de configuration tu peux changer la fréquence de test

      lami20j
      0
      1. Modérateur
        Bien sûr ce n'est qu'un début.

        tu peux créer un répertoire (ça sera ton logiciel) qui contiendra plusieurs fichiers

        - le fichier de configuration par défaut
        - un fichier script pour contrôler le daemon qui sera copier dans /etc/init.d
        - le script daemon
        - un fichier README
        - si besoin une page man
        - si besoin des options en ligne de commande qui te permettront de faire tout le test ( -all) ou seulement le ping ( -p), etc..
        - un script d'installation qui va copier les fichiers de config et de contrôle de daemon à leur emplacement ainsi que le script daemon dans /usr/local/bin, aussi les pages man dans /usr/local/man/manN, etc..

        Tu peux aussi créer un paquetage .rpm ou .deb qui pourra être installer avec les commandes spécifiques

        lami20j
        0
        1. Merci beaucoup lami20j pour ton aide.
          Je vais regarder attentitevemnt ce que tu as écrit mais j'ai quelques questions.
              System.disk(’hda3’,95) ou System.disk(’/home’,90) occupation disque
              System.process(’apache’) vérification de l’existence d’un processus
              System.cpuload(10) charge du processeur (faisable facilement ?)
           • des services réseau :
             Internet.ping(’192.168.0.10’) machine en vie ?
             Internet.tcp(’192.168.0.10’,’25’) port toujours ouvert ?
             Internet.url(’http://foo/bar’) existence d’une URL (idem en ftp)
          ...
          

          Dans l'énoncé, les Internet. et System. indiquent en faite le module a utilisé pour pouvoir utilisé les fonctions ping, tcp etc ... c'est bien cela ?
          Comment on fait pour savoir dans quel module se trouve une fonction qu'il me faudra utiliser ?
          0
          1. Modérateur
            Re,

            • le système Linux sur lequel il est exécuté :
            System.disk(’hda3’,95) ou System.disk(’/home’,90) occupation disque
            System.process(’apache’) vérification de l’existence d’un processus
            System.cpuload(10) charge du processeur (faisable facilement ?)
            • des services réseau :
            Internet.ping(’192.168.0.10’) machine en vie ?
            Internet.tcp(’192.168.0.10’,’25’) port toujours ouvert ?
            Internet.url(’http://foo/bar’) existence d’une URL (idem en ftp)
            Internet.url(’http://foo/bar’,’/path/to/file’) contenu d’une page web
            • la base de données :
            Database.alive() base en fonctionnement ?
            Database.request(’select * from c where a>100’)
            teste la non existence de résultat ; erreur si des lignes sont renvoyées
            Voici les actions que le logiciel pourrait déclencher :
            • Action.mail(’sujet’,’texte’) envoi d’un courriel
            • Action.ftp(’/full/path/to/local/file’,’/pub/directory’) envoi d’un fichier
            • Action.database(’update c set a=10 where a>100’) commande SQL

            :Frequency(60)

            Ce que tu vois en gras j'ai déjà traité. Voir le script modifié.

            Comment on fait pour savoir dans quel module se trouve une fonction qu'il me faudra utiliser ?

            Ben, je ne sais pas par coeur. Il faut chercher sur le site de CPAN ou dans les modules standard.

            lami20j

            P.S. je vais regarder de plus près demain, pour ce soir je m'arrête là

            Tu peux déjà tester ce que je t'ai donné.
            Pour l'instant une fois le daemon démarrer si tu veux l'arrêter tape
            ps aux | grep daemon.pl pour récuperer le PID
            ensuite tu fait kill PID
            0
            1. Salut,

              à la compilation du fichier daemon.pl, ce message apparait mais ça n'empeche pas le programme de fonctionner et j'ai bien le fichier log.daemon de créer
              Use of uninitialized value in concatenation (.) or string at ./daemon.pl line 76, <CONFIG> line 10

              Est-ce que c'est pareil chez toi et est-ce que tu as pu regarder de plus pret ?
              0
              1. Modérateur
                Dit plutôt ce que tu fait.
                Quel script tu as exécuté. As-tu fait des modifications?
                Il n'y a pas de compilation manuelle.
                Tu l'exécute tu simplement perl daemon.pl, c'est l'interpreteur Perl qui s'occupe de la compilation+exécution

                Je ne peux pas t'aider si tu ne me dit ce que tu fait.

                CONFIG c'est le handler vers le fichier de configuration.
                Je ne sais pas que tu as écrit dans ce fichier.
                Je n'ai pas fait un gestionnaire d'erreurs.

                C'était seulement pour te donner une idée.

                Je pourrai faire ton exo, mais ça ne te servira à rien de la voir comme ça prêt à porter

                lami20j

                P.S. Chez moi tel quel, ça fonctionne sans erreurs
                0
                1. J'ai écrit les fichiers .conf et .pl dans un repétoire perl qui est dans mon /home/ en modifant les chemins pour que ce soit pris en compte.

                  Après j'ai fait un chmod +x daemon.pl puis ./daemon.pl
                  En procédant de cette manière, j'ai eu le message
                  Use of uninitialized value in concatenation (.) or string at ./daemon.pl line 76, <CONFIG> line 10


                  J'ai aussi rajouté l'option -w dans
                  #!/usr/bin/perl -w
                  0
                  1. Modérateur
                    Re,

                    pas besoin de -w
                    j'ai déjà écrit use warnings;use strict;

                    Affiche le fichier de configuration s'il te plaît. Merci.

                    lami20j
                    0
                    1. Modérateur
                      La ligne 76 du script

                      print DAEMON "$date daemon fonctionne\n$local\n$remote\n";

                      la ligne 10 de CONFIG (fichier de configuration)

                      remote.ping 192.168.1.2

                      $remote doit capturer 192.168.1.2

                      A priori tu n'as rien ici, ou le format ne correspond pas

                      J'ai besoin de voir ton fichier de configuration

                      lami20j
                      0
                      1. Le fichier de configuration est le même que celui que tu avais écrit :
                        # la frequence dont le daemon execute les testes
                        # Ex : Frequenci NN  
                        # frequency insensible à la case
                        # NN nombre de secondes
                        frequency 10
                        
                        # vérification de la connexion
                        # faire un ping vers une machine (locale ou distante)
                        local.ping localhost
                        remote.ping 192.168.1.2
                        0
                        1. Modérateur
                          Fait un copier coller du script, tu dois y avoir une erreur quelque part.

                          lami20j
                          0
                          1. Les 2 fichiers:
                            # la frequence dont le daemon execute les testes
                            # Ex : Frequenci NN  
                            # frequency insensible à la case
                            # NN nombre de secondes
                            frequency 60
                            
                            # vérification de la connexion
                            # faire un ping vers une machine (locale ou distante)
                            local.ping localhost
                            remote.ping 192.168.1.2

                            et
                            #!/usr/bin/perl
                            use warnings;
                            use strict;
                            
                            use POSIX;
                            use Time::HiRes;
                            use Net::Ping;
                            
                            my $ping = Net::Ping->new();
                            my ($local,$remote);
                            my $freq;
                            my ($localhost,$remotehost);
                            
                            my $ip = qr/(?:\d{1,3}\.){3}\d{1,3}/;
                            
                            # fichier de configuration
                            open CONFIG,"/home/stephanie/perl/mon_daemon.conf"
                               or die "E/S : $!\n";
                            
                            while (<CONFIG>){
                            # on saute les commentaires
                              next if /^#/;
                            # je recupere la frequence
                              $freq=$1 if /frequency\s*(\d+)/i;
                            # je recupere l'hôte locale
                              $localhost = $1 if /local\.ping\s*(\w+)/i;
                            # je recupere l'hôte distante à vérifiier
                              $remotehost = $1 if /remote\.ping\s*($ip)/i;
                            }
                            
                            # exécution de script en tant que daemon
                            # 
                            my $pid=fork;
                            exit if $pid;
                            die "fork impossible : $!" unless defined($pid);
                            
                            POSIX::setsid()
                                or die "Pas de nouvelle session : $!\n";
                            
                            my $kill_pid = 0;
                            
                            sub gestion_signaux {
                                $kill_pid = 1;
                            }
                            
                            $SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&gestion_signaux;
                            
                            # les taches que le daemon exécute
                            # chaque 60 secondes il va écrire
                            # dans /var/log/log.daemon
                            # dans le format
                            #jj/mm/yyyy hh:mm:ss   daemon fonctionne
                            #jj/mm/yyyy hh:mm:ss   localhost en vie
                            #   
                            
                            until ($kill_pid) {
                            # calcule la date et l'heure du teste
                            # pour affichage dans journal
                              my ($s,$mm,$h,$j,$m,$y) = (localtime)[0..5];
                              $j  = sprintf("%02d",$j);
                              $m  = sprintf("%02d",$m +=1);
                              $y +=1900;
                              $s  = sprintf("%02d",$s);
                              $mm = sprintf("%02d",$mm);
                              $h  = sprintf("%02d",$h);
                              my $date = "$j/$m/$y $h:$mm:$s";
                            
                              open DAEMON,">> /home/stephanie/perl/log.daemon"
                                 or die "E/S : $!\n";
                            
                              if ($ping->ping($localhost)){
                                 $local = "$date $localhost en vie";
                              }
                              if ($ping->ping($remotehost)){
                                 $remote = "$date $remotehost en vie";
                              }
                              print DAEMON "$date daemon fonctionne\n$local\n$remote\n"; 
                              sleep($freq);
                            }
                            
                            0
                            1. Modérateur
                              Entre ces 2 lignes ajoute ça

                              print "$remotehost\n"

                              donc tu auras
                              print DAEMON "$date daemon fonctionne\n$local\n$remote\n"; 
                              print "$remotehost\n"
                              sleep($freq);
                              lami20j

                              P.S. Bizarre, j'ai copier tes fichiers, et j'exécute chez moi. Pas de problèmes.

                              Affiche aussi le contenu de log.daemon pour voir
                              0
                              1. J'ai mis frequancy a 20 pour avoir plus de résultats.
                                Même après avoir fait ps aux | grep daemon.pl puis kill PID, le message continue de s'afficher ...
                                03/11/2006 22:11:13 daemon fonctionne
                                03/11/2006 22:11:13 localhost en vie
                                
                                03/11/2006 22:11:38 daemon fonctionne
                                03/11/2006 22:11:38 localhost en vie
                                
                                03/11/2006 22:12:03 daemon fonctionne
                                03/11/2006 22:12:03 localhost en vie
                                
                                03/11/2006 22:12:28 daemon fonctionne
                                03/11/2006 22:12:28 localhost en vie
                                
                                03/11/2006 22:12:53 daemon fonctionne
                                03/11/2006 22:12:53 localhost en vie
                                
                                03/11/2006 22:13:18 daemon fonctionne
                                03/11/2006 22:13:18 localhost en vie
                                
                                03/11/2006 22:13:27 daemon fonctionne
                                03/11/2006 22:13:27 localhost en vie
                                
                                03/11/2006 22:13:43 daemon fonctionne
                                03/11/2006 22:13:43 localhost en vie
                                
                                03/11/2006 22:13:52 daemon fonctionne
                                03/11/2006 22:13:52 localhost en vie
                                
                                03/11/2006 22:14:03 daemon fonctionne
                                03/11/2006 22:14:03 localhost en vie
                                
                                03/11/2006 22:14:17 daemon fonctionne
                                03/11/2006 22:14:17 localhost en vie
                                
                                03/11/2006 22:14:28 daemon fonctionne
                                03/11/2006 22:14:28 localhost en vie
                                
                                03/11/2006 22:14:42 daemon fonctionne
                                03/11/2006 22:14:42 localhost en vie
                                0
                                1. Modérateur
                                  donc il ne vois pas l'ip de la machine distante

                                  mets ton fichier de configuration sur cjoint.com

                                  lami20j

                                  P.S. Entre temps je vais étudier en détails tes fichiers.
                                  0
                                  1. Pour ce qui est des différentes options qu'il faut coder :
                                    • le système Linux sur lequel il est exécuté :
                                    System.disk(’hda3’,95) ou System.disk(’/home’,90) occupation disque
                                    System.process(’apache’) vérification de l’existence d’un processus
                                    System.cpuload(10) charge du processeur (faisable facilement ?)
                                    • des services réseau :
                                    Internet.ping(’192.168.0.10’) machine en vie ?
                                    Internet.tcp(’192.168.0.10’,’25’) port toujours ouvert ?
                                    Internet.url(’http://foo/bar’) existence d’une URL (idem en ftp)
                                    Internet.url(’http://foo/bar’,’/path/to/file’) contenu d’une page web
                                    • la base de données :
                                    Database.alive() base en fonctionnement ?
                                    Database.request(’select * from c where a>100’)
                                    teste la non existence de résultat ; erreur si des lignes sont renvoyées
                                    Voici les actions que le logiciel pourrait déclencher :
                                    • Action.mail(’sujet’,’texte’) envoi d’un courriel
                                    • Action.ftp(’/full/path/to/local/file’,’/pub/directory’) envoi d’un fichier
                                    • Action.database(’update c set a=10 where a>100’) commande SQL
                                    :Frequency(60) 


                                    while (<CONFIG>){
                                    # on saute les commentaires
                                      next if /^#/;
                                    # je recupere la frequence
                                      $freq=$1 if /frequency\s*(\d+)/i;
                                    # je recupere l'hôte locale
                                      $localhost = $1 if /local\.ping\s*(\w+)/i;
                                    # je recupere l'hôte distante à vérifiier
                                      $remotehost = $1 if /remote\.ping\s*($ip)/i;
                                    }
                                    

                                    ...
                                    Ici, c'est le résultat des lignes.
                                    open DAEMON,">> /home/stephanie/perl/log.daemon"
                                         or die "E/S : $!\n";
                                    
                                      if ($ping->ping($localhost)){
                                         $local = "$date $localhost en vie";
                                      }
                                      if ($ping->ping($remotehost)){
                                         $remote = "$date $remotehost en vie";
                                      }
                                    

                                    Dans le fichier de configuration, comment doivent s'écrire toutes les commandes pour analyse ?
                                    # la frequence dont le daemon execute les testes
                                    # Ex : Frequenci NN  
                                    # frequency insensible à la case
                                    # NN nombre de secondes
                                    frequency 20
                                    
                                    # vérification de la connexion
                                    # faire un ping vers une machine (locale ou distante)
                                    local.ping localhost
                                    remote.ping 192.168.1.2
                                    0
                                    1. http://cjoint.com/data/ldwKpfwh5h.htm
                                      0
                                      1. Modérateur
                                        Enleve cette ligne
                                        my $ip = qr/(?:\d{1,3}\.){3}\d{1,3}/;

                                        et au lieu de

                                        $remotehost = $1 if /remote\.ping\s*($ip)/i;

                                        écrit

                                        $remotehost = (split /\s+/,$_)[1] if /^remote\.ping/i;

                                        Pour ce qui est des différentes options qu'il faut coder :

                                        je vais voir ça demain

                                        lami20j

                                        P.S. le résultat de test j'aimerai le voir ce soir

                                        As-tu une adresse 192.168.1.2 sur ton réseau?
                                        je n'ai pas écrit un message si la machine n'existe pas
                                        je vais le faire
                                        0
                                        • 1
                                        • 2
                                        • 3