Copyright © 2000 Robert Stagner
Copyright © 2000 Daniel Detcheberry
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 :
vous avez des permissions root
(c'est habituellement le cas, si vous faites fonctionner ceci à partir de chez vous).
vous avez des copies des scripts ppp-on,
ppp-off et ppp-on-dialer.
Ceux-ci peuvent habituellement être trouvés sur le répertoire /usr/doc/ppp-2.3.7/scripts/
.
vous vous êtes connectés et déconnecté avec succès à Internet en utilisant les scripts ppp-on et ppp-off.
votre ISP vous a fourni un accès avec un numéro de téléphone local (je suppose que ceci n'est pas vraiment obligatoire, mais qui souhaite payer des frais de téléphone).
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 :
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; # 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.
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.