Par
Robert Stagner
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 24/7 à 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:
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 connexionexec /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_SCRIPTTexte 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 :
Fournir un connexion/déconnexion à Internet par l'intermédiaire d'un programme shell (/usr/sbin/ppp-on, ou ppp-off). Capturer l'adresse IP générée dynamiquement à partir du service de l'ISP. Envoyer l'adresse IP récupérée à une adresse prédéfinie d'e-mail de sorte qu'un rapport à distance puisse être effectué à votre ordinateur personnel.
Le script Perl commence par les lignes suivantes:
# compteur utilisé pour fournir un délai pendant que la connexion ppp s'établit $COUNT = 1; <verb> # 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 $amp;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 disconnectLa 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.
Tous droits réservés ©2000, Robert Stagner publié dans le numéro 53 de la Linux Gazette, mai 2000
Traduction française de Daniel DETCHEBERRY.