Uno de los problemas que puede haberle dado el ejemplo anterior es que
ten�a que establecer la conexi�n manualmente antes de poder ejecutar
pppd. Al contrario que dip,
pppd no tiene su propio lenguaje de scripts para
llamar al sistema remoto y entrar en �l, sino que conf�a en otro programa
externo para que haga esto. El comando que tiene que ser ejecutado puede
d�rsele pppd con la opci�n connect
en la l�nea de �rdenes. El pppd redirigir� la entrada
y salida est�ndar de �rdenes a la l�nea serie.
El paquete pppd incluye un programa muy simple llamado
chat que es capaz de automatizar secuencias de registro simples.
Hablaremos sobre este programa con detalle.
Si su secuencia de registro es compleja, necesitar� algo m�s potente que
chat. Una alternativa �til que deber�a considerar es
expect, escrito por Don Libes. Tiene un lenguaje
basado en Tcl, y fue dise�ado exactamente para este tipo de aplicaci�n.
Aquellos de vosotros cuyas secuencias de registro requieran, por ejemplo,
autentificaci�n por reto/respuesta con generaci�n de claves
encontrar�is expect lo suficientemente potente para
ocuparse de la tarea. Puesto que hay tantas posibles variaciones de este
tema, no describiremos como desarrollar un gui�n de expect apropiado en
este libro. Es suficiente decir, que usted llama a su gui�n expect
especificando su nombre con la opci�n
connect de pppd.
Tambi�n es importante se�alar que cuando el gui�n est� ejecut�ndose, la entrada
y la salida est�ndar estar�n desviadas al m�dem, y no a
la terminal que invoc� al pppd. Si usted necesita
interactuar como usuario, usted deber� hacerlo mediante un terminal
virtual compartido, o mediante otros medios.
La orden chat le permite especificar un script del estilo
de los de UUCP. B�sicamente, un script de chat consiste en una secuencia
alterna de cadenas que esperamos recibir del sistema remoto y las respuestas
que hemos de enviar. Las llamaremos respectivamente, cadenas
esperadas y cadenas enviadas.
Este es un extracto de un t�pico script de chat:
ogin: b1ff ssword: s3|<r1t |
Este script le indica a chat que espere a que el sistema remoto
le env�e el mensaje de petici�n de usuario y entonces le devuelve el nombre
del usuario b1ff. S�lo esperamos por
ogin: para que no importe si el mensaje
de registro empiece por l may�scula o min�scula, o si llega con basura. La siguiente
cadena es una cadena esperada que hace que chat espere al
mensaje de petici�n de contrase�a y le env�e nuestra contrase�a como respuesta.
Esto es b�sicamente lo que hacen los scripts de chat. Un script completo para
llamar a un servidor PPP deber�a, adem�s, incluir las �rdenes apropiados para
el m�dem. Suponga que su m�dem entiende los comandos Hayes, y que el n�mero de
tel�fono del servidor es el 318714. En ese caso, la l�nea completa de
chat para que pudi�semos establecer una conexi�n con
c3po ser�a:
$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN |
Por definici�n, la primera cadena que damos a chat tiene que ser una cadena
esperada, pero como el m�dem no dir� nada hasta que hablemos con �l,
hacemos que chat la ignore especificando una cadena vac�a.
Continuamos enviando ATZ, la orden de
inicializaci�n para los m�dems compatibles Hayes, y esperamos a que nos responda
con (OK). La siguiente cadena env�a a
chat la orden de marcado junto con el n�mero de tel�fono,
y espera a que aparezca el mensaje CONNECT
como respuesta. Esto est� seguido de otra cadena vac�a otra vez, porque ahora no
queremos enviar nada, sino esperar a que aparezca el mensaje de petici�n de registro.
El resto del script de chat funciona exactamente como antes. Esta descripci�n
probablemente parezca algo confusa, pero veremos en un momento que hay una forma
de hacer los scrips chat mucho m�s f�ciles de entender.
La opci�n –v hace que chat capture
todas las actividades hacia la facilidad local2
del demonio syslog.
[1]
El escribir el script de chat directamente en la l�nea de �rdenes implica
un cierto riesgo, pues los usuarios pueden ver la l�nea de �rdenes de un
proceso con la orden ps. Puede evitar esto colocando
el script del chat en un fichero, por ejemplo llamado dial-c3po.
Entonces, podr� hacer al chat leer el script del fichero en vez de
la l�nea de comando utilizando la opci�n –f, seguida por el
nombre del fichero.Esto supondr� el beneficio a�adido de
hacer nuestra secuencia de chat expect m�s f�cil de entender.
Al modificar nuestro ejempo, nuestro fichero dial-c3po tendr� ahora
un aspecto como �ste:
'' ATZ
OK ATDT318714
CONNECT ''
ogin: ppp
word: GaGariN |
Cuando usamos un script de chat de esta manera, la cadena que esperamos
recibir est� en la izquierda y la respuesta que devolveremos est� en
la derecha. Present�ndolas as� son mucho m�s f�ciles de leer y entender.
Por lo tanto la invocaci�n completa al pppd tendr� ahora
un aspecto como �ste:
# pppd connect "chat -f dial-c3po" /dev/ttyS3 38400 -detach \
crtscts m�dem defaultroute |
Adem�s de la opci�n connect que
se refiere al script de llamada, hemos a�adido dos opciones m�s a la l�nea
de �rdenes: –detach, que le indica al pppd
que no se separe de la consola y se convierta en un proceso en segundo plano. La palabra
modem activa algunas acciones espec�ficas
para m�dem sobre el dispositivo serie, como colgar la l�nea antes y despu�s de
la llamada. Si no utiliza esta opci�n, pppd no se preocupar�
de la l�nea DCD del puerto, y por lo tanto no podr� detectar si el extremo remoto
cuelga de forma imprevista.
Los ejemplos anteriores eran bastante simples; chat
permite el uso de scripts mucho m�s complejos. Una caracter�stica muy �til
es la capacidad de especificar cadenas frente a las cuales parar chat
con un error. Unas cadenas t�picas para parar pueden ser mensajes como
BUSY o
NO CARRIER, que son los que su
m�dem produce cuando el n�mero al que llama comunica o cuando la l�nea no tiene tono.
Para hacer que chat las reconozca inmediatamente en vez de
esperar, puede introducirlas al principio del script utilizando la opci�n
ABORT:
$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ... |
Igualmente, puede variar el valor del tiempo de espera para algunas
partes de los scripts de chat insertando opciones
TIMEOUT.
Algunas veces, tambi�n querr� disponer de alg�n tipo de ejecuci�n condicional
de algunas partes del script de chat. Por ejemplo, cuando reciba el mensaje de
petici�n de registro (login) desde el extremo remoto, puede que quiera enviar un BREAK, o
un retorno de carro. Puede conseguir esto a�adiendo un sub-script a la parte
de la cadena esperada. Consiste en una secuencia de cadenas de env�o y esperadas,
de la misma forma que el script en su totalidad, pero separadas por guiones.
El sub-script es ejecutado desde el momento en que la cadena esperada a la que
est�n ligados no es recibida a tiempo. Para este ejemplo, modificar�amos el
script de chat de la siguiente manera:
ogin:-BREAK-ogin: ppp ssword: GaGariN |
Ahora, cuando chat no recibe el mensaje de login del
sistema remoto, se ejecuta el sub-script enviando un BREAK y esperando de
nuevo por el mensaje de login. Si ahora ya aparece, el script contin�a como
usualmente y si no, termina con un error.