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...n"
ogin: account
ssword: pass
$ c
SAY "OK, logu??...n"
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"
ECHOON active l'option, et ECHOOFF 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'
'' ATZ
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'
'' ATZ
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.