| CHAT(8) | System Manager's Manual | CHAT(8) |
chat - script conversațional automatizat cu un modem
chat [ opțiuni ] script
Programul chat definește un schimb conversațional între calculator și modem. Scopul său principal este de a stabili conexiunea între demonul protocolului punct-la-punct („Point-to-Point Protocol Daemon”: pppd) și procesul pppd de la distanță.
Scriptul chat definește comunicațiile.
Un script este format din una sau mai multe perechi de șiruri „așteaptă-trimite”, separate prin spații, cu o pereche opțională de șiruri subiacentă „așteaptă-trimite”, separate prin liniuță, ca în exemplul următor:
Această linie indică faptul că programul chat ar trebui să aștepte șirul de caractere „ogin:”. În cazul în care nu primește o solicitare de conectare în intervalul de timp alocat, acesta trebuie să trimită o secvență de întrerupere la distanță și apoi să aștepte șirul „ogin:”. Dacă se primește primul „ogin:”, atunci secvența de întrerupere nu este generată.
Odată ce a primit solicitarea de conectare, programul chat va trimite șirul ppp și apoi va aștepta solicitarea „ssword:”. Când primește solicitarea de introducere a parolei, va trimite parola hello2u2.
În mod normal, după șirul de răspuns se trimite un retur de cărucior. Acesta nu este așteptat în șirul „așteaptă ” decât dacă este solicitat în mod special prin utilizarea secvenței de caractere \r.
Secvența „așteaptă” ar trebui să conțină doar ceea ce este necesar pentru a identifica șirul. Deoarece în mod normal este stocată într-un fișier pe disc, nu trebuie să conțină informații variabile. În general, nu este acceptabil să se caute șiruri de timp, șiruri de identificare a rețelei sau alte date variabile ca șir de așteptare.
Pentru a ajuta la corectarea caracterelor care pot fi corupte în timpul secvenței inițiale, caută șirul „ogin:” în loc de „login:”. Este posibil ca caracterul „l” din față să fie primit din greșeală și este posibil să nu găsiți niciodată șirul, chiar dacă a fost trimis de sistem. Din acest motiv, scripturile caută „ogin:” mai degrabă decât „login:” și „ssword:” mai degrabă decât „password:”.
Un script foarte simplu ar putea arăta în felul următor:
Cu alte cuvinte, așteaptă ....ogin:, trimite ppp, așteaptă ...ssword:, trimite hello2u2.
În practica reală, scripturile simple sunt rare. Cel puțin, ar trebui să includeți secvențe de sub-așteptare în cazul în care șirul original nu este primit. De exemplu, luați în considerare următorul script:
Acesta ar fi un scenariu mai bun decât cel simplu folosit anterior. Acesta ar căuta aceeași solicitare login:, însă, dacă nu se primește una, se trimite o singură secvență de returnare și apoi se va căuta din nou login:. În cazul în care zgomotul de linie ascunde prima solicitare de autentificare, atunci trimiterea liniei goale va genera, de obicei, o nouă solicitare de autentificare.
Comentariile pot fi încorporate în scriptul de chat. Un comentariu este o linie care începe cu caracterul # (hash) în coloana 1. Astfel de linii de comentariu sunt pur și simplu ignorate de programul de chat. Dacă trebuie așteptat un caracter „#” ca prim caracter al secvenței expect, trebuie să puneți între ghilimele șirul așteptat. Dacă doriți să așteptați o solicitare care începe cu un caracter # (hash), ar trebui să scrieți ceva de genul acesta:
Dacă șirul de trimis începe cu un semn (@), restul șirului este considerat a fi numele unui fișier care trebuie citit pentru a obține șirul de trimis. În cazul în care ultimul caracter al datelor citite este o linie nouă, acesta este eliminat. Fișierul poate fi o conductă cu nume (sau fifo) în loc de un fișier obișnuit. Acest lucru oferă o modalitate prin care chat să comunice cu un alt program, de exemplu, un program care să solicite utilizatorului și să primească o parolă tastată de acesta.
Multe modemuri vor raporta starea apelului sub forma unui șir de caractere. Aceste șiruri pot fi CONNECTED (conectat) sau NO CARRIER (fără purtătoare) sau BUSY (ocupat). Adesea este de dorit să se încheie scriptul în cazul în care modemul nu reușește să se conecteze la distanță. Dificultatea constă în faptul că un script nu ar ști cu exactitate ce șir de caractere de modem ar putea primi. La o încercare, poate primi BUSY, în timp ce data următoare poate primi NO CARRIER.
Aceste șiruri „abort” pot fi specificate în script folosind secvența ABORT. Aceasta se scrie în script ca în exemplul următor:
Această secvență nu va aștepta nimic, iar apoi va trimite șirul ATZ. Răspunsul așteptat la această secvență este șirul OK. Atunci când primește OK, șirul ATDT5551212 pentru a marca numărul de telefon. Șirul așteptat este CONNECT. Dacă se primește șirul CONNECT, se execută restul scriptului. Cu toate acestea, în cazul în care modemul găsește un telefon ocupat, acesta va trimite șirul BUSY. Acest lucru va face ca șirul să se potrivească cu secvența de caractere de anulare. În acest caz, scriptul va eșua deoarece a găsit o corespondență cu șirul de caractere de anulare. În cazul în care a primit șirul NO CARRIER, acesta va eșua din același motiv. Se poate primi oricare dintre aceste șiruri. Oricare dintre cele două șiruri va încheia scriptul chat.
Această secvență permite ștergerea șirurilor ABORT definite anterior. Șirurile ABORT sunt păstrate într-o matrice de o dimensiune predeterminată (la momentul compilării); CLR_ABORT va recupera spațiul pentru intrările șterse, astfel încât noile șiruri să poată utiliza acel spațiu.
Directiva SAY permite scriptului să trimită șiruri de caractere către utilizator la terminal prin intermediul ieșirii de eroare standard. În cazul în care chat este rulat de «pppd», iar «pppd» rulează ca un demon (detașat de terminalul care îl controlează), ieșirea de eroare standard va fi redirecționată în mod normal către fișierul „/etc/ppp/connect-errors”.
Șirurile SAY trebuie să fie incluse în ghilimele simple sau duble. În cazul în care este nevoie de retur de cărucior și de avans de linie în șirul de ieșire, trebuie să le adăugați în mod explicit la șir.
Șirurile SAY pot fi utilizate pentru a transmite mesaje de progres în secțiuni ale scriptului în care doriți ca „ECHO OFF” să fie dezactivat, dar utilizatorul să știe totuși ce se întâmplă. Un exemplu este:
Această secvență va prezenta utilizatorului doar șirurile SAY, iar toate detaliile scriptului vor rămâne ascunse. De exemplu, dacă scriptul de mai sus funcționează, utilizatorul va vedea:
Un șir report este similar cu șirul ABORT. Diferența constă în faptul că șirurile și toate caracterele până la următorul caracter de control, cum ar fi un retur de cărucior, sunt scrise în fișierul de raport.
Șirurile de raport pot fi utilizate pentru a izola rata de transmisie a șirului de conectare a modemului și pentru a returna valoarea către utilizatorul chat-ului. Analiza logică a șirului de raport are loc împreună cu alte procesări ale șirului, cum ar fi căutarea șirului de așteptare. Utilizarea aceluiași șir pentru o secvență de raportare și de anulare nu este probabil foarte utilă, însă este posibilă.
Șirurile de raport pentru a nu modifica codul de finalizare a programului.
Aceste șiruri de „raport” pot fi specificate în script folosind secvența REPORT. Aceasta se scrie în script ca în exemplul următor:
Această secvență nu va aștepta nimic; apoi va trimite șirul ATDT555121212 pentru a forma numărul de telefon. Șirul așteptat este CONNECT. Dacă se primește șirul CONNECT, se execută restul scriptului. În plus, programul va scrie în fișierul de așteptare șirul „CONNECT” plus orice caractere care îl urmează, cum ar fi rata de conectare.
Această secvență permite ștergerea șirurilor REPORT definite anterior. Șirurile REPORT sunt păstrate într-o matrice de o dimensiune predeterminată (la momentul compilării); CLR_REPORT va recupera spațiul pentru intrările șterse, astfel încât noile șiruri să poată utiliza acel spațiu.
Opțiunile de ecou controlează dacă ieșirea de la modem este transmisă la stderr. Această opțiune poate fi definită cu ajutorul opțiunii -e, dar poate fi controlată și prin cuvântul cheie ECHO. Perechea „așteaptă-trimite” ECHO ON activează ecoul, iar ECHO OFF îl dezactivează. Cu acest cuvânt cheie puteți selecta ce părți ale conversației trebuie să fie vizibile. De exemplu, cu următorul script:
toate ieșirile rezultate din configurarea și apelarea modemului nu sunt vizibile, dar începând cu mesajul CONNECT (sau BUSY), totul va fi transmis.
Opțiunile HANGUP controlează dacă o
deconectare a modemului trebuie considerată sau nu ca o eroare.
Această opțiune este utilă în scripturile pentru
sistemele de apelare care vor închide și vor suna
înapoi la sistemul dumneavoastră. Opțiunile HANGUP pot
fi ON sau OFF.
Atunci când HANGUP este stabilită la OFF și modemul
închide (de exemplu, după prima etapă de conectare la
un sistem de apelare), chat va continua să ruleze scriptul (de
exemplu, așteaptă primirea apelului și a doua
etapă de conectare). De îndată ce apelul primit este
conectat, trebuie să utilizați directiva HANGUP ON
pentru a reinstala comportamentul normal al semnalului de închidere.
Iată un script de exemplu (simplu):
Valoarea inițială a timpului de așteptare este de 45 de secunde. Aceasta poate fi modificată cu ajutorul parametrului -t. De asemenea, puteți specifica "TIMEOUT 0".
Pentru a modifica valoarea timpului de așteptare pentru următorul șir de așteptare, se poate utiliza următorul exemplu:
Aceasta va schimba timpul de așteptare la 10 secunde atunci când se așteaptă la promptul login:. Timpul de așteptare este apoi modificat la 5 secunde atunci când se așteaptă la solicitarea parolei.
Timpul de așteptare, odată modificat, rămâne în vigoare până când este modificat din nou.
Șirul special de răspuns EOT indică faptul că programul de chat trebuie să trimită un caracter EOT către stația de la distanță. Aceasta este în mod normal secvența de caractere de sfârșit de fișier. După EOT nu se trimite un caracter de returnare. Secvența EOT poate fi încorporată în șirul de trimitere folosind secvența ^D.
Șirul special de răspuns BREAK va determina trimiterea unei condiții de întrerupere. Întreruperea este un semnal special pe emițător. Prelucrarea normală pe receptor este de a schimba rata de transmisie. Acesta poate fi utilizat pentru a parcurge ciclic ratele de transmisie disponibile pe stația de la distanță până când veți putea primi o solicitare de conectare validă. Secvența de întrerupere poate fi încorporată în șirul de trimitere utilizând secvența \K.
Șirurile de așteptare și de răspuns pot conține secvențe de control. Toate secvențele sunt legale în șirul de răspuns. Multe dintre ele sunt legale în șirul de așteptare. Cele care nu sunt valabile în secvența de așteptare sunt indicate astfel.
Variabilele de mediu sunt disponibile în cadrul scripturilor de chat, dacă opțiunea -E a fost specificată în linia de comandă. Metacaracterul $ este utilizat pentru a introduce numele variabilei de mediu care trebuie înlocuită. În cazul în care substituția eșuează, deoarece variabila de mediu solicitată nu este definită, se înlocuiește variabila cu nothing.
Programul chat se va încheia cu următoarele coduri de finalizare.
Cu ajutorul codului de terminare, este posibil să se determine ce eveniment a pus capăt scriptului. Este posibil să se decidă dacă șirul „BUSY” a fost primit de la modem, spre deosebire de „NO DIAL TONE”. În timp ce primul eveniment poate fi încercat din nou, al doilea va avea probabil puține șanse de reușită în timpul unei noi încercări.
Informații suplimentare despre scripturile chat pot fi găsite în documentația UUCP. Scriptul chat a fost preluat din ideile propuse de scripturile folosite de programul uucico.
Programul chat este în domeniul public. Aceasta nu este licența publică GNU. Dacă se rupe, atunci puteți păstra ambele bucăți.
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
| 22 mai 1999 | Chat versiunea 1.22 |