CHAT(8)

NUME
chat - script conversațional automatizat cu un modem

SINOPSIS
chat [ opțiuni ] script

DESCRIERE

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ță.

OPȚIUNI

-f <fișier-chat>
    Citește scriptul de chat din fișierul fișier-chat. Utilizarea acestei opțiuni se exclude reciproc cu parametrii scriptului de chat. Utilizatorul trebuie să aibă acces de citire la fișier. Sunt permise mai multe linii în fișier. Pentru a separa șirurile de caractere trebuie să se utilizeze spații sau caractere de tabulare orizontală.

-t <timp-așteptare>
    Stabilește timpul de așteptare pentru primirea șirului așteptat. Dacă șirul nu este primit în termenul limită, atunci șirul de răspuns nu este trimis. Se poate trimite un răspuns alternativ sau scriptul va eșua dacă nu există un șir de răspuns alternativ. Un script eșuat va face ca programul chat să se încheie cu un cod de eroare diferit de zero. Puteți utiliza, de asemenea, șirul TIMEOUT pentru a specifica timpul de așteptare.

-r <fișier-raport>
    Stabilește fișierul de ieșire a șirurilor de raport. Dacă se utilizează cuvântul cheie REPORT, șirurile rezultate sunt scrise în acest fișier. Dacă nu se utilizează această opțiune și se utilizează în continuare cuvintele cheie REPORT, fișierul stderr (ieșirea de eroare standard) este utilizat pentru șirurile de raport.

-e  Începe cu opțiunea de ecou activată. Ecoul poate fi, de asemenea, activat sau dezactivat în anumite puncte ale scriptului de chat prin utilizarea cuvântului cheie ECHO. Atunci când funcția de ecou este activată, toate ieșirile de la modem sunt transmise la stderr.

-E  Permite înlocuirea variabilelor de mediu în scripturile de chat folosind sintaxa standard $xxx.

-v  Solicită ca scriptul chat să fie executat în modul descriptiv. Programul chat va consemna apoi starea de execuție a scriptului de chat, precum și toate textele primite de la modem și șirurile de ieșire trimise la modem. În mod implicit, se înregistrează prin intermediul SYSLOG; metoda de înregistrare poate fi modificată cu ajutorul opțiunilor „-S” și „-s”.

-V  Solicită ca scriptul chat să fie executat în modul descriptiv la ieșirea de eroare standard (stderr). Astfel, programul chat va înregistra pe dispozitivul „stderr” toate textele primite de la modem și șirurile de ieșire trimise la modem. Acest dispozitiv este de obicei consola locală de la stația care execută programul chat sau pppd.

-s  Utilizează ieșirea de eroare standard (stderr). Toate mesajele de jurnal de la opțiunea „-v” și toate mesajele de eroare vor fi trimise la stderr.

-S  Nu utilizează SYSLOG. În mod implicit, mesajele de eroare sunt trimise la SYSLOG. Utilizarea opțiunii „-S” va împiedica atât mesajele de jurnal de la opțiunea „-v”, cât și mesajele de eroare să fie trimise la SYSLOG.

-T <număr-telefon>
    Introduce un șir arbitrar, de obicei un număr de telefon, care va fi înlocuit cu metacaracterul de substituție \T într-un șir de trimitere.

-U <număr-telefon2>
    Introduce un al doilea șir de caractere, de obicei un număr de telefon, care va fi înlocuit cu metacaracterul de substituție \U într-un șir de trimitere. Acest lucru este util atunci când se apelează un adaptor de terminal ISDN care necesită două numere.

script
    În cazul în care scriptul nu este specificat într-un fișier cu opțiunea -f, atunci scriptul este inclus ca parametri pentru programul chat.

SCRIPT CHAT

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:

    ogin:-BREAK-ogin: ppp ssword: hello2u2

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:

    ogin: ppp ssword: hello2u2

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:

    ogin:--ogin: ppp ssword: hello2u2

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.

COMENTARII
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:

    # Acum așteaptă promptul și trimite șirul de ieșire din sesiune
    '# ' logout

TRIMITEREA DE DATE DINTR-UN FIȘIER
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.

ȘIRURI ABORT
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:

    ABORT BUSY ABORT 'NO CARRIER' ” ATZ OK ATDT5551212 CONNECT

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.

ȘIRURI CLR_ABORT
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.

ȘIRURI SAY
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:

    ABORT BUSY
    ECHO OFF
    SAY "Se apelează furnizorul dvs. de servicii de internet (ISP)...\n"
    ” ATDT5551212
    TIMEOUT 120
    SAY "Se așteaptă până la 2 minute pentru conectare... "
    CONNECT ”
    SAY "Conectat, acum se autentifică...\n"
    ogin: account
    ssword: pass
    $ \c
    SAY "Ok, Autentificat...\n" etc ...

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:

    Se apelează furnizorul dvs. de servicii de internet (ISP)...
    Se așteaptă până la 2 minute pentru conectare... Conectat, acum se autentifică...
    Ok, Autentificat...

ȘIRURI REPORT
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:

    REPORT CONNECT ABORT BUSY ” ATDT5551212 CONNECT ” ogin: account

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.

ȘIRURI CLR_REPORT
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.

ECHO
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:

    ABORT 'BUSY'
    ABORT 'NO CARRIER'
    ” ATZ
    OK\r\n ATD1234567
    \r\n \c
    ECHO ON
    CONNECT \c
    ogin: account

toate ieșirile rezultate din configurarea și apelarea modemului nu sunt vizibile, dar începând cu mesajul CONNECT (sau BUSY), totul va fi transmis.

HANGUP
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):

    ABORT 'BUSY'
    ” ATZ
    OK\r\n ATD1234567
    \r\n \c
    CONNECT \c
    'Callback login:' call_back_ID
    HANGUP OFF
    ABORT "Autentificare greșită"
    'Callback Password:' Call_back_password
    TIMEOUT 120
    CONNECT \c
    HANGUP ON
    ABORT "NO CARRIER"
    ogin:--BREAK--ogin: real_account
    etc ...

TIMPUL DE AȘTEPTARE (TIMEOUT)
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:

    ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2

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.

TRIMITEREA EOT
Ș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.

GENERAREA ÎNTRERUPERII (BREAK)
Ș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.

SECVENȚE DE CONTROL
Ș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.

”   Așteaptă sau trimite un șir de caractere nul. Dacă trimiteți un șir nul, se va trimite totuși caracterul de retur. Această secvență poate fi fie o pereche de apostrofuri, fie o pereche de caractere de ghilimele.

\b  reprezintă un caracter de backspace.

\c  Suprimă linia nouă de la sfârșitul șirului de răspuns. Aceasta este singura metodă de a trimite un șir de caractere fără un caracter de retur la sfârșit. Acesta trebuie să se afle la sfârșitul șirului de trimitere. De exemplu, secvența hello\c va trimite pur și simplu caracterele h, e, l, l, o. (nevalabil în așteptare).

\d  Întârzie o secundă. Programul utilizează sleep(1) care va întârzia până la maximum o secundă. (nu este valabil în așteptare).

\K  Introduce o întrerupere BREAK (nevalabil în așteptare).

\n  Transmiteți un caracter de linie nouă sau de salt de linie.

\N  Trimite un caracter nul. Aceeași secvență poate fi reprezentată prin \0. (nu este valabil în așteptare).

\p  Face o pauză de o fracțiune de secundă. Întârzierea este de 1/10 de secundă. (nu este valabil în așteptare).

\q  Suprimă scrierea șirului în fișierul SYSLOG. Șirul ?????? este scris în jurnal în locul acestuia; (nu este valabil în așteptare).

\r  Trimite sau așteaptă un retur de cărucior.

\s  Reprezintă un caracter spațiu în șirul de caractere. Acesta poate fi utilizat atunci când nu este de dorit să se citeze șirurile care conțin spații. Secvența 'Salut Andrei!' și Salut\sAndrei! sunt identice.

\t  Trimite sau așteaptă un caracter de tabulare.

\T  Trimite șirul de număr de telefon specificat cu opțiunea -T; (nevalabil în așteptare).

\U  Trimite șirul de numere de telefon 2, așa cum este specificat cu opțiunea -U; (nevalabil în așteptare).

\\  Trimite sau așteaptă un caracter de bară oblică inversă.

\ddd
    Restrânge cifrele octale (ddd) într-un singur caracter ASCII și trimite acest caracter; (unele caractere nu sunt valabile în așteptare).

^C  Substituie secvența cu caracterul de control reprezentat de C. De exemplu, caracterul DC1 (17) este prezentat sub forma ^Q; (unele caractere nu sunt valabile în așteptare).

VARIABILE DE MEDIU
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.

CODURI DE IEȘIRE
Programul chat se va încheia cu următoarele coduri de finalizare.

0   Încheierea normală a programului. Aceasta indică faptul că scriptul a fost executat fără erori până la încheierea normală.

1   Unul sau mai mulți parametri nu sunt valabili sau un șir de așteptare a fost prea mare pentru tampoanele interne. Acest lucru indică faptul că programul nu a fost executat corect.

2   A apărut o eroare în timpul executării programului. Aceasta se poate datora unei operații de citire sau de scriere care a eșuat dintr-un anumit motiv sau la primirea de către chat a unui semnal, cum ar fi SIGINT.

3   Un eveniment de depășire a timpului de așteptare a avut loc atunci când a existat un șir așteptare fără a avea un șir subiacent „-trimitere”. Acest lucru poate însemna că nu ați programat corect scriptul pentru această condiție sau că a avut loc un eveniment neașteptat și șirul așteptat nu a putut fi găsit.

4   A apărut primul șir marcat ca fiind o condiție ABORT.

5   Cel de-al doilea șir marcat ca fiind o condiție ABORT a apărut.

6   Al treilea șir marcat ca fiind o condiție ABORT a apărut.

7   Al patrulea șir marcat ca fiind o condiție ABORT a apărut.

... Celelalte coduri de terminare sunt, de asemenea, șiruri marcate ca o condiție ABORT.

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.

CONSULTAȚI ȘI
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.

uucico(1), uucp(1)

DREPTURI DE AUTOR
Programul chat este în domeniul public. Aceasta nu este licența publică GNU. Dacă se rupe, atunci puteți păstra ambele bucăți.

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.