Se relier à votre ordinateur personnel

Gazette Linux n°53 — Mai 2000

Daniel Detcheberry

Adaptation française 

Frédéric Marchal

Correction du DocBook 

Article paru dans le n°53 de la Gazette Linux de mai 2000.

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Il y a quinze jours, j'étais au travail tapant sur PC sous NT (s'il vous plaît, pas de flamme la-dessus, je n'ai pas d'autre possibilité: -), quand je me suis soudainement rendu compte qu'un script Perl que j'avais mis à jour sur ma machine à la maison (un PC tournant sous Linux Red Hat 6,0), devait être transféré sur mon ordinateur au travail. Comme je n'ai pas une connexion 24h/24 à Internet pour mon PC Linux, je manquais de chance. Je ne pouvais pas effectuer un simple transfert par FTP sur ma machine à la maison et télécharger le script. Ou le pouvais-je ?

Je suppose que je pourrais installer une connexion par câble modem ou par DSL, mais je trouve personnellement qu'une connexion PPP à 56K est financièrement nettement moins onéreuse — du moins pour l'instant. De toute façon, j'ai pensé à la façon dont je pourrais d'une façon ou d'une autre toucher mon PC sur Linux sur Internet bien que sans surveillance (c-à-d. juste aprés l'avoir laissé pour le travail chaque matin). Ma solution, bien qu'impliquant plusieurs scripts et un cronjob, peut être installée pour une connexion PPP plutôt rapidement. Une fois testé et configuré correctement, le résultat final vous fournira un moyen pour vous connecter automatiquement à Internet et envoyer alors un e-mail à votre adresse de travail contenant l'adresse IP générée de façon dynamique et assignée à votre ordinateur personnel par votre ISP. Les seules nécessités pour que ceci soit en service et fonctionne sont les suivantes :

A part ces exigences, la configuration de votre système pour qu'il appelle automatiquement votre ISP est assez simple. La première étape pour installer et faire fonctionner ceci est de copier (en tant que root) les scripts ppp-on et ppp-off sur le répertoire /usr/sbin. S'assurer que les permissions sont placées à 0755 pour chaque fichier. Puis, copier ppp-on-dialer dans le répertoire /etc/ppp. Le script dialer est la deuxième moitié d'une manœuvre en deux étapes pour établir une connexion à votre ISP. La première moitié est le script ppp-on.

Ensuite, éditer le script ppp-on en assignant les informations sur le numéro de téléphone, le compte et le mot de passe. En outre, souvenez-vous d'attribuer le bon périphérique et la vitesse à votre modem. Le mien lit sur /dev/ttyS3 et a une vitesse de 115200. Cela devrait ressembler à ce qui suit une fois fait :

  #!/bin/sh
  #
  # voici les paramètres.  Changez-les si nécessaire.
  TELEPHONE=  votre numéro de téléphone # le numéro de téléphone pour la connexion

  ACOUNT=votre compte # le nom du compte pour le logon (comme dans 'George Burns')

  PASSWORD=votre mot de passe# le mot de passe pour ce compte (et ' Gracie Allen ') 
  LOCAL_IP=0.0.0.0 # adresse locale d'IP si connue. 0,0,0,0 en cas d'attribution dynamique 
  REMOTE_IP=0.0.0.0 # adresse IP distante si souhaitée.Normalement 0,0,0,0 
  NETMASK=255.255.255.0 # le netmask approprié si nécessaire  
  # les exporter de sorte qu'ils soient disponibles au bon moment pour 'ppp-on-dialer'.

  export TELEPHONE ACCOUNT PASSWORD
  #
  # ceci est l'emplacement du script qui compose le numéro de téléphone et se connecte
  # Veuillez utiliser le nom de fichier absolu car la variable $PATH n'est pas 
  # utilisée dans l'option connect.  (faire ceci avec le compte root créerait 
  # un trou de sécurité aussi ne le demandez pas.)  
  # DIALER_SRIPT=/etc/ppp/ppp-on-dialer 
  # 
  # initialise la connexion  

  exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS3 115200\
  asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
  noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT 

Texte en gras — code qui doit être modifié pour répondre à vos besoins.

Maintenant que vous avez toutes les scripts aux endroits appropriés, il est temps de regarder un petit script Perl que j'ai écrit qui appelle le processus de connexion ou de déconnexion, tout comme il envoie un e-mail avec l'adresse IP de mon PC Linux vers mon PC NT au travail. Placer une copie (en tant que root) de ce script dans votre répertoire /usr/local/bin avec une permission à 0755. Le but de ce script est de :

Le script Perl commence par les lignes suivantes :

          # compteur utilisé pour fournir un délai pendant que la connexion ppp s'établit
          $COUNT = 1;  
	  
          # contrôle l'existence d'options 
             if (!$ARGV[0] ¦¦ $ARGV[0] !~ m/(connect¦disconnect)/i) {
                  print "Usage: sendMeIP.pl <connect ¦ disconnect>\n";
                  exit -1;
             }

          # Appelle et exécute la connexion/déconnexion à Internet 
          &pppConnection($ARGV[0]);  

          # Capture l'adresse IP distante crée dynamiquement
          $assignedIPAddress = &captureIPAddress;

          # envoyer l'adresse IP par e-mail
          &sendMail($assignedIPAddress);

Essentiellement, tout ce que fait ce script est d'abord de créer un compteur, puis de contrôler pour voir si les arguments nécessaires ont été passés au programme. Si oui, il établit une connexion (ou, une déconnexion — &pppConnection) à Internet. Capturer l'adresse IP (&captureIPAddress) en recherchant la donnée récupérée d'un d'appel à /sbin/ifconfig et finalement l'envoyer par e-mail (&sendMail). L'appel pour exécuter ifconfig se produit en fait dans le sous-programme de &captureIPAddress. Regardons ce code :

   sub captureIPAddress {
          my $captureIFCONFIG;
          $captureIFCONFIG = qx#/sbin/ifconfig#;
          if ($captureIFCONFIG =~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/) {
                  my $assignedIPAddress = "$1";
                  print "IP Address capture successful: $assignedIPAddress.\n";
                  return ($assignedIPAddress);
          }
          elsif (($captureIFCONFIG !~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/)
          && ($COUNT < 60)) {
                  $COUNT++;
                  sleep 1;
                  &captureIPAddress;
          }
          else {
             print "Houston, nous avons un problème pour la capture d'adresse IP.\n";
             exit -2;         
          }
  }

  ...[ code retiré pour la clarté ]  

sub sendMail {
          my $assignedIPAddress = shift;
          my $mailService = emplacement de votre programme de mail : le mien est "/usr/sbin/sendmail";
          my $from =  "Votre Nom <votreEmailLocal/@host.com>";
          my $to =  "Votre Nom <votreEmailTravail/@host.com>";

          die "Trouble sending mail: $!" unless (-e $mailService);

          open(SENDMAIL, "¦$mailService -oi -t") or die "Problème pour envoyer le courrier:
  $!";

          print SENDMAIL <<"EOMAIL";
  From: $from
  To: $to
  Subject: Un Message Important A Propos De votre.ordinateur

  Utilisez l'addresse IP suivant pour établir une connexion avec 
  votre.ordinateur : $amp;assignedIPAddress

  EOMAIL
          close(SENDMAIL);
          print "Le message e-mail a été envoyé.\n";
  }

N'oubliez pas de modifier les données pour répondre à vos besoins personnels.

D'abord, on exécute la commande /sbin/ifconfig en utilisant l'équivalence en Perl d'un backtick (fonction qx (substitution de commande avec ```'', NDT) ). La sortie de cette commande est capturée dans la variable $captureIFCONFIG. Nous essayons alors de rechercher une configuration qui contienne « inet addr: » suivie d'une adresse d'IP et ensuite suivie par « P-t-P ». Puisque c'est l'adresse qui nous concerne, nous l'enregistrons dans &assignedIPAddress. Cependant, si nous n'avons pas trouvé l'adresse IP et que le compteur est inférieur à 60, alors nous ajoutons un à la variable COUNT et faisons dormir le programme pendant une seconde. A ce moment-là, nous appelons le même sous-programme à plusieurs reprises jusqu'à ce que nous ayons une structure de comparaison ou que nous ayons dépassé le compte. Ceci donne à la commande /sbin/ifconfig une chance d'écrire l'information appropriée d'interface pour une connexion PPP. En fait, nous donnons au programme environ 60 secondes pour trouver l'adresse IP. Si nous ne pouvons pas trouver une adresse IP, nous imprimons un message d'erreur et quittons le programme.

En conclusion, vous devrez configurer le script Perl pour qu'il s'adresse à votre programme d'email ou encore qu'il initialise les adresses e-mail désignées par « From » et « To » contenues dans le sous-programme de &sendMail. Il suffit d'attribuer à nouveau simplement à $mailService, $from, et $to des variables appropriées à votre cas.

Maintenant nous arrivons à l'étape finale — l'installation de votre système pour exécuter automatiquement le script Perl. Nous accomplirons ceci par l'utilisation de la commande crontab. En tant que root, exécuter la commande de crontab avec l'option -e. L'option -e vous met en mode édition. A partir de là ajouter les deux lignes suivantes et sauvegarder le fichier :

00 8 * * 1,2,3,4,5 perl / usr/local/bin/sendMeIP.pl connect
15 12 * * 1,2,3,4,5 perl / usr/local/bin/sendMeIP.pl disconnect

La première de ces deux lignes appelle le script Perl à 8:00 du matin, du lundi au vendredi. La deuxième ligne appelle le script Perl pour vous déconnecter d'Internet à 12:15, du lundi au vendredi. Vous pouvez contrôler votre travail dans la crontab en exécutant une nouvelle fois la commande crontab, mais cette fois-ci en lui passant l'option -l. Pour de plus amples informations sur crontab, regardez les pages de man.

Une fois que vous aurez reçu le message d'e-mail au travail, vous devriez maintenant pouvoir vous relier à votre machine par l'intermédiaire de telnet et à ftp en utilisant l'adresse IP reçue.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.