Content-type: text/html
Manpage of CHAT
CHAT
Section: Maintenance Commands (8)
Updated: 22 mai 1999
Index
Return to Main Contents
NOM
chat - Script de conversation automatisée avec un modem
SYNOPSIS
chat
[
options
]
script
DESCRIPTION
Le programme chat régit une « conversation » entre l'ordinateur et le
modem. Son but premier est d'établir la connexion entre pppd, le démon
du Protocole Point à Point, et le processus pppd distant.
OPTIONS
- -f <fichier chat>
-
Utilise le script chat du fichier chat. L'utilisation de cette option
et celle des paramètres de chat sont mutuellement exclusives. L'utilisateur
doit avoir le droit de lecture sur le fichier. Le fichier peut comporter
plusieurs lignes ; les blancs et les caractères de tabulation sont utilisables
pour séparer les chaînes.
- -t <timeout>
-
Fixe le temps limite (en secondes) d'attente d'une chaîne. Si la chaîne n'est
pas reçue dans ce temps, la chaîne-réponse n'est pas envoyée. Une chaîne
alternative peut être envoyée. S'il n'y en a pas, le script s'arrêtera sur
une erreur. Dans ce cas, le programme chat se terminera avec une valeur
de retour non nulle.
- -r <fichier rapport>
-
Détermine le fichier devant contenir les chaînes de rapport (voir ci-dessous).
Si vous précisez le mot-clef REPORT dans le script, les chaînes
suivant celui-ci seront écrites dans ce fichier. Si cette option n'est pas
utilisée, mais que vous mentionnez quand même REPORT dans le
script, la sortie standard (stderr) sera utilisée pour le
rapport des chaînes transmises.
- -e
-
Démarre avec l'option echo activée. Cette option peut aussi être activée ou
désactivée en des points spécifiques du script chat, en utilisant le mot-clef
ECHO. Quand echo est activée, toutes les sorties du modem sont envoyées
vers stderr.
- -E
-
Active la substitution des variables d'environnement à l'intérieur des scripts
chat, grâce à la syntaxe standard $xxx.
- -v
-
Demande que le script chat soit exécuté en mode bavard. Le programme
chat enregistrera alors l'état d'exécution du script, en plus des chaînes
reçues et envoyées au modem. La méthode par défaut d'enregistrement est
d'utiliser le SYSLOG ; elle peut être modifiée par les drapeaux -S et -s.
- -V
-
Demande que le script chat soit exécuté en mode bavard sur stderr.
Le programme chat affichera alors sur la sortie standard toutes les
chaînes reçues et envoyées au modem. La sortie standard est généralement la
console locale de l'ordinateur exécutant le programme chat ou pppd.
- -s
-
Utilise la sortie standard (stderr). Tous les messages d'enregistrement
générés par '-v' et tous les messages d'erreur seront envoyés vers stderr.
- -S
-
N'utilise pas le SYSLOG. Par défaut, les messages d'erreur sont envoyés vers
SYSLOG. L'utilisation de -S empêchera les messages générés par '-v' et les
messages d'erreur d'être envoyés vers le SYSLOG.
- -T <No tél.>
-
Passe une chaîne arbitraire, habituellement un numéro de téléphone, qui sera
substitué au métacaractère de substitution \T dans une chaîne d'envoi.
- -U <2e No tél.>
-
Passe une deuxième chaîne, habituellement un numéro de téléphone, qui sera
substitué au métacaractère de substitution \U dans une chaîne d'envoi.
C'est utile pour appeler un modem ISDN, qui a besoin de deux numéros.
- script
-
Si le script n'est pas lu dans un fichier avec l'option -f, il doit
être inclus sous forme de paramètres du programme chat.
SCRIPT CHAT
Le script chat régit les communications.
Un script consiste en une ou plusieurs paires de chaînes attendue/envoyée
("expect-send"), séparées par des espaces, avec une paire optionnelle
"sous-attendue/sous-envoyée" ("subexpect-subsend"), séparées par un tiret,
comme dans l'exemple suivant :
-
ogin:-BREAK-ogin: ppp ssword: hello2u2
Cette ligne indique au programme chat d'attendre la chaîne "ogin:".
S'il ne reçoit pas d'invite de login dans l'intervalle de temps alloué,
il doit envoyer une séquence d'interruption (BREAK) à son correspondant, puis
attendre à nouveau la chaîne "ogin:". Si le premier "ogin:" est reçu, la
séquence d'interruption n'est pas envoyée.
Dès qu'il aura reçu l'invite de login, le programme chat enverra la
chaîne "ppp", puis attendra l'invite "ssword:". À sa réception, il enverra le
mot de passe "hello2u2".
Un retour chariot suit normalement chaque chaîne envoyée. En revanche, aucun
retour chariot n'est prévu dans une chaîne attendue, à moins qu'il ne soit
spécifiquement exigé en utilisant la séquence de caractères "\r".
La chaîne attendue ne devrait contenir que le strict nécessaire pour identifier
la chaîne. Comme elle est normalement stockée dans un fichier sur le disque,
elle ne devrait pas contenir d'information variable, comme des heures, des
durées, des identifications de réseau.
Pour être moins sensible aux caractères qui pourraient être corrompus pendant
la séquence initiale, attendez la chaîne "ogin:" plutôt que "login:".
Il est possible que le "l" de tête soit mal reçu, et dans ce cas vous ne
chat ne trouvera jamais la chaîne attendue. Pour la même raison, les
scripts attendent "ssword:" plutôt que "password:".
Un script très simple pourrait ressembler à ceci :
-
ogin: ppp ssword: hello2u2
En clair, attend ....ogin:, envoie ppp, attend ...ssword:, envoie hello2u2.
Dans la pratique, les scripts simples sont rares. Au minimum, vous devriez
inclure des séquences "sous-attendues" au cas où la chaîne d'origine ne soit
pas reçue. Par exemple, examinez le script suivant :
-
ogin:--ogin: ppp ssword: hello2u2
C'est un script un peu meilleur que celui, simpliste, utilisé précédemment.
Il attend la même invite "login:", mais si elle n'est pas reçue, il envoie un
simple retour chariot, puis se remet en attente de "login:". Si du bruit sur
la ligne interfère avec la première invite, l'envoi d'une ligne vide génère
habituellement une nouvelle invite.
COMMENTAIRES
Des commentaires peuvent être inclus dans un script chat. Un commentaire est
une ligne commençant par un caractère # (dièse) en première colonne.
Ces lignes sont simplement ignorées par le programme chat. Si un caractère '#'
est le premier caractère d'une chaîne attendue, cette chaîne doit être placée
entre guillemets :
-
# Attend maintenant l'invite puis envoie la chaîne "logout" (déconnexion)
'# ' logout
ENVOYER DES DONNÉES DEPUIS UN FICHIER
Si la chaîne à envoyer commence par une arobase (@), le reste de la chaîne est
considéré comme le nom d'un fichier à lire pour obtenir la chaîne à envoyer.
Si le dernier caractère des données lues est un saut de ligne, il est supprimé.
Le fichier peut être un fifo au lieu d'un fichier régulier. Cela fournit à
chat un moyen de communiquer avec un autre programme, par exemple un
programme qui affiche une invite et reçoit un mot de passe entré
par l'utilisateur.
CHAÎNES D'ABANDON (ABORT)
La plupart des modems signalent l'état de la communication sous forme d'une
chaîne. Ces chaînes peuvent être CONNECTED (connecté), NO CARRIER
(pas de porteuse), ou BUSY (occupé).
Il est souvent préférable de terminer le script si le modem échoue à se
connecter à son correspondant. La difficulté est qu'un script ne peut pas
savoir exactement quelle chaîne il risque de recevoir du modem. Lors d'une
tentative, il peut recevoir BUSY, alors qu'à la suivante, il recevra
NO CARRIER.
Ces chaînes "d'abandon" ("abort") peuvent être spécifiées dans le script avec
le mot-clef ABORT, comme dans l'exemple suivant :
-
ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT
Cette séquence n'attend rien, et envoie la chaîne ATZ (initialisation modem).
La réponse attendue est la chaîne OK. À sa réception, il envoie la chaîne
ATDT5551212 pour composer le numéro. La chaîne attendue est alors CONNECT.
Dès qu'elle est reçue, le reste du script est exécuté. Mais si le modem tombe
sur une ligne occupée, il enverra la chaîne BUSY, qui correspondra à une
des chaînes d'abandon. De même si le programme reçoit NO CARRIER.
Les deux chaînes seront reconnues, et termineront toutes deux le script.
RÉINITIALISATION DES CHAÎNES D'ABANDON (CLR_ABORT)
Cette séquence permet d'effacer les chaînes ABORT précédemment spécifiées.
Les chaînes ABORT sont gardées dans un tableau de taille prédéterminée
(à la compilation) ; CLR_ABORT récupère l'espace des entrées effacées,
qui peut alors être utilisé par les nouvelles chaînes.
CHAÎNES SAY
La directive SAY permet au script d'envoyer des chaînes à l'utilisateur,
à travers la sortie d'erreur standard du terminal. Si chat est lancé par
pppd, et que pppd tourne comme démon (détaché de son terminal de contrôle),
l'erreur standard sera normalement redirigée vers le fichier
/etc/ppp/connect-errors.
Les chaînes SAY doivent être entre apostrophes simples ou doubles.
Si un retour chariot ou un saut de ligne est nécessaire en sortie, vous devez
l'ajouter explicitement à la chaîne.
Les chaînes SAY peuvent être utilisées pour afficher des messages de progression
dans des sections du script en 'ECHO OFF', mais pendant lesquelles vous voulez
tout de même tenir l'utilisateur au courant de ce qui se passe.
Voici un exemple :
-
ABORT BUSY
ECHO OFF
SAY "J'appelle votre FAI...\n"
'' ATDT5551212
TIMEOUT 120
SAY "J'attends la connexion jusqu'à 2 minutes... "
CONNECT ''
SAY "Connecté, maintenant je me logue...
ogin: account
ssword: pass
$ SAY "OK, logué...
etc ...
Cette séquence ne présentera à l'utilisateur que les chaînes SAY, et lui
épargnera tous les détails. Par exemple, si le script ci-dessus fonctionne,
l'utilisateur verra :
-
J'appelle votre FAI...
J'attends la connexion jusqu'à 2 minutes... Connecté, maintenant je me loggue...
OK, loggué...
CHAÎNES DE RAPPORT
Une chaîne de rapport (report) est similaire à une chaîne ABORT.
La différence est que les chaînes, ainsi que tous les caractères jusqu'au
prochain caractère de contrôle (comme le retour chariot), sont écrites
dans le fichier de rapport.
Les chaînes de rapport peuvent être utilisées pour extraire le débit de la
chaîne de connexion envoyée par le modem, et envoyer la valeur à l'utilisateur
de chat. L'analyse des chaînes de rapport se pratique idéalement couplée avec
le traitement des autres chaînes, comme l'attente d'une chaîne "expect".
L'utilisation d'une même chaîne dans deux séquences REPORT et ABORT n'est
probablement pas très utile, mais elle est toutefois possible.
Ces chaînes de rapport peuvent être spécifiées dans le script par le mot-clef
REPORT, comme dans l'exemple suivant :
-
REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account
Cette séquence n'attend rien, et envoie la chaîne ATDT5551212 pour composer
le numéro. La chaîne attendue est CONNECT. Si elle est reçue, le reste
du script est exécuté. En outre, le programme écrira dans le fichier de rapport
la chaîne "CONNECT", plus tous les caractères qui la suivent, comme le débit
en bauds.
RÉINITIALISATION DES CHAÎNES DE RAPPORT (CLR_REPORT)
Cette séquence permet d'effacer les chaînes REPORT précédemment
spécifiées.
Les chaînes REPORT sont gardées dans un tableau de taille prédéterminée
(à la compilation) ; CLR_REPORT récupère l'espace des entrées effacées,
qui peut alors être utilisé par les nouvelles chaînes.
ECHO
L'option echo contrôle si la sortie du modem doit être dupliquée vers
stderr. Cette option peut être activée avec l'option -e
sur la ligne de commande, mais peut aussi être contrôlée par le
mot-clef ECHO dans le script. La paire "attendue/envoyée"
ECHO ON active l'option, et ECHO OFF la
désactive. Grâce à ce mot-clef, vous pouvez sélectionner quelles
parties de la conversation doivent être visibles. Par exemple, avec le
script suivant :
-
ABORT 'BUSY'
ABORT 'NO CARRIER'
OK\r\n ATD1234567
\r\n \c
ECHO ON
CONNECT \c
ogin: account
Toutes les sorties résultant de la configuration du modem et de la numérotation
restent invisibles, alors que tout est visible à partir du message
CONNECT (ou BUSY).
HANGUP
L'option HANGUP contrôle si un raccrochage du modem doit être considéré comme
une erreur ou pas. Cette option est utile dans les scripts pour les systèmes
de rappel, qui raccrochent et rappellent votre système. Les options de HANGUP
peuvent être ON ou OFF.
Si HANGUP est réglé à OFF et que le modem raccroche (par exemple, à la fin de
la première étape de connexion à un système de rappel), chat continuera
d'exécuter le script (par exemple, par l'attente d'un appel entrant et d'une
invite de login en début de seconde étape). Dès que l'appel entrant est pris,
vous pouvez utiliser la directive HANGUP ON pour réinstaurer le
comportement normal au signal de raccrochage. Voici un script (simple)
d'exemple :
-
ABORT 'BUSY'
OK\r\n ATD1234567
\r\n \c
CONNECT \c
'Callback login:' call_back_ID
HANGUP OFF
ABORT "Bad Login"
'Callback Password:' Call_back_password
TIMEOUT 120
CONNECT \c
HANGUP ON
ABORT "NO CARRIER"
ogin:--BREAK--ogin: real_account
etc ...
DÉLAI D'EXPIRATION (TIMEOUT)
Le délai d'expiration (timeout) initial est de 45 secondes. Il peut être
changé par le paramètre -t de la ligne de commande.
Pour changer la valeur du délai pour la prochaine chaîne attendue,
inspirez-vous de l'exemple suivant :
-
ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2
Cela fixe le délai d'expiration à 10 secondes pendant l'attente de l'invite
"login:". Puis ce délai est ramené à 5 secondes pendant l'attente de l'invite
de mot de passe.
Une fois modifié, le nouveau délai reste en vigueur jusqu'à ce qu'il soit à
nouveau changé.
ENVOYER UN EOT
La chaîne d'envoi spéciale EOT indique que le programme chat doit
envoyer un caractère EOT (End Of Transmission, fin de transmission) à son
correspondant. Normalement, c'est la séquence de caractères End-of-file (fin
de fichier). Aucun caractère de retour n'est envoyé après l'EOT.
La séquence EOT peut être incluse dans une chaîne d'envoi en utilisant la
séquence ^D.
GÉNÉRER UNE INTERRUPTION (BREAK)
La chaîne d'envoi spéciale BREAK envoie une interruption. Il s'agit
d'un signal spécial généré par le modem (NdT : courte interruption de la
porteuse). Des interruptions peuvent être utilisées pour changer cycliquement
de débit de transmission, parmi ceux disponibles sur le correspondant, jusqu'à
ce que vous receviez une invite valide.
La séquence d'interruption peut être incluse dans une chaîne d'envoi en
utilisant la séquence \K.
SÉQUENCES D'ÉCHAPPEMENT
Les chaînes attendues et envoyées peuvent contenir des séquences d'échappement.
Elles sont toutes autorisées dans les chaînes de réponse (envoyées), la plupart
le sont dans les chaînes attendues. Celles qui ne le sont pas sont signalées.
- ''
-
Attend ou envoie une chaîne vide. Si vous envoyez une chaîne vide, chat enverra
aussi le caractère retour chariot. Cette séquence peut être entourée
d'apostrophes simples ou doubles.
- \\b
-
représente un backspace.
- \\c
-
Supprime le caractère retour chariot à la fin de la chaîne envoyée. C'est la
seule méthode pour envoyer une chaîne sans retour chariot final. Il doit être
placé à la fin de la chaîne d'envoi. Par exemple, la séquence "hello\c"
enverra simplement les caractères h, e, l, l, o.
(Non valide dans une chaîne attendue.)
- \\d
-
Délai d'une seconde. Le programme utilise sleep(1), qui attendra une
seconde.
(Non valide dans une chaîne attendue.)
- \\K
-
Insère une interruption (BREAK).
(Non valide dans une chaîne attendue.)
- \\n
-
Envoie un saut de ligne.
- \\N
-
Envoie un caractère nul. La même séquence peut être représentée par \0.
(Non valide dans une chaîne attendue.)
- \\p
-
Marque une pause d'1/10 de seconde.
(Non valide dans une chaîne attendue.)
- \\q
-
Empêche l'écriture de la chaîne dans le fichier SYSLOG. La chaîne
?????? est écrite à sa place.
(Non valide dans une chaîne attendue.)
- \\r
-
Envoie ou attend un retour chariot.
- \\s
-
Représente un espace dans la chaîne. Cela peut être utilisé pour éviter
de mettre la chaîne entre guillemets. Les séquences 'HI TIM' et
HI\sTIM sont équivalentes.
- \\t
-
Envoie ou attend un caractère de tabulation.
- \\T
-
Envoie la chaîne passée en paramètre par l'option -T.
(Non valide dans une chaîne attendue.)
- \\U
-
Envoie la chaîne passée en paramètre par l'option -U.
(Non valide dans une chaîne attendue.)
- \\\\
-
Envoie ou attend un caractère "backslash".
- \\ddd
-
Envoie le caractère ASCII donc le code en octal est ddd.
(Certains caractères ne sont pas valides dans une chaîne attendue.)
- ^C
-
Substitue à la séquence le caractère de contrôle représenté par C.
Par exemple, le caractère DC1 (17) est représenté par ^Q.
(Certains caractères ne sont pas valides dans une chaîne attendue.)
VARIABLES D'ENVIRONNEMENT
Les variables d'environnement sont disponibles dans les scripts chat
si l'option -E a été spécifiée sur la ligne de commande. Le
métacaractère $ est utilisé pour introduire le nom de la
variable d'environnement à substituer. Si la substitution échoue parce
que la variable n'est pas définie, rien ne remplacera la variable.
VALEURS DE RETOUR
Le programme chat se terminera en renvoyant l'un de ces codes :
- 0
-
Terminaison normale du programme. Cela indique que le script s'est
exécuté sans erreur jusqu'à la fin.
- 1
-
L'un au moins des paramètres est invalide, ou bien une chaîne attendue
est trop longue pour les tampons internes. Cela indique que le
programme ne s'est pas exécuté correctement.
- 2
-
Un erreur est survenue durant l'exécution du programme. Cela peut être
dû à une erreur de lecture ou d'écriture, ou à la réception par CHAT
d'un signal comme SIGINT.
- 3
-
Une expiration de délai (timeout) a eu lieu pendant l'attente d'une
chaîne sans chaîne "-sousenvoyée". Cela peut vouloir dire que votre
script n'est pas adapté aux conditions, ou qu'un événement inattendu a
eu lieu, et que la chaîne attendue n'a pas été reçue.
- 4
-
La première chaîne marquée par une condition ABORT a été détectée.
- 5
-
La deuxième chaîne marquée par une condition ABORT a été détectée.
- 6
-
La troisième chaîne marquée par une condition ABORT a été détectée.
- 7
-
La quatrième chaîne marquée par une condition ABORT a été détectée.
- ...
-
Toutes les autres valeurs de retour indiquent aussi une condition
ABORT.
Grâce à la valeur de retour, il est possible de déterminer quel
événement a terminé le script. Il est possible de décider si la chaîne
"BUSY" a été reçue par le modem, ou si c'est "NO DIAL TONE".
Dans le premier cas, il est possible de refaire une tentative plus
tard, alors que cela a peu de chance de marcher (sans intervention
manuelle) dans le second.
VOIR AUSSI
Des informations supplémentaires sur les scripts chat peuvent être
trouvées dans la documentation UUCP. Le script chat a été
développé à partir d'idées proposées dans les scripts utilisés par le
programme uucico.
uucico(1), uucp(1)
COPYRIGHT
Le programme chat est dans le domaine public. Il n'est PAS sous la
Licence Publique GNU (GPL). S'il se casse, vous pouvez garder les morceaux.
TRADUCTION
Guillaume Allègre <Guillaume.Allegre@imag.fr>, août 2000
AVERTISSEMENT SUR LA TRADUCTION
Il est possible que cette traduction soit imparfaite ou périmée. En cas de
doute, veuillez vous reporter au document original en langue anglaise fourni
avec le programme.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- OPTIONS
-
- SCRIPT CHAT
-
- COMMENTAIRES
-
- ENVOYER DES DONNÉES DEPUIS UN FICHIER
-
- CHAÎNES D'ABANDON (ABORT)
-
- RÉINITIALISATION DES CHAÎNES D'ABANDON (CLR_ABORT)
-
- CHAÎNES SAY
-
- CHAÎNES DE RAPPORT
-
- RÉINITIALISATION DES CHAÎNES DE RAPPORT (CLR_REPORT)
-
- ECHO
-
- HANGUP
-
- DÉLAI D'EXPIRATION (TIMEOUT)
-
- ENVOYER UN EOT
-
- GÉNÉRER UNE INTERRUPTION (BREAK)
-
- SÉQUENCES D'ÉCHAPPEMENT
-
- VARIABLES D'ENVIRONNEMENT
-
- VALEURS DE RETOUR
-
- VOIR AUSSI
-
- COPYRIGHT
-
- TRADUCTION
-
- AVERTISSEMENT SUR LA TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 20:26:57 GMT, July 10, 2005