NOMBRE¶
dip - maneja conexiones IP del tipo "dialup"
SINOPSIS¶
dip [
-v] [
-m mtu] [
-p proto]
scriptfile
dip -t [
-v]
dip -i [
-a] [
-v]
diplogin [
username]
diplogini
dip [
-v]
-k [
-l tty_line]
DESCRIPCIÓN¶
dip maneja las conexiones necesarias para enlaces IP conmutados, como lo
son PPP o puede manejar tanto conexiones entrantes como salientes, usando
palabras clave de seguridad para las conexiones entrantes. Las conexiones de
salida utilizan la biblioteca del sistema
dial(3) si ésta
está disponible.
La primera forma interpreta
scriptfile para marcar y abrir la
conexión IP. (ver
MODO DIALOUT más adelante).
La opción
-t ejecuta
dip interactivamente (ver
MODO
COMANDO más adelante). Esta es más útil mientras se
reunen datos para levantar un chat script.
dip -i maneja las conexiones entrantes (ver
MODO DIALIN más
adelante)
diplogin es equivalente a
dip -i, y
diplogini
es equivalente a
dip -i -a. Estas son principalmente para usar con
versiones de
login(1) que no pasan parámetros de línea de
comando al programa en el shell.
dip -k elimina un proceso existente
dip, cerrando la
conexión.
OPCIONES¶
- -a
- Pregunta por el nombre de usuario y clave de acceso.
- -i
- Actúa como un servidor de marcado entrante
(dialin)(ver MODO DIALIN más adelante).
- -k
- Elimina el proceso dip que ejecuta el dispositivo
tty especificado (ver la opción -l), en otro caso, la
invocación más reciente de dip. Note que dip tiene
el cuidado de no eliminar un proceso iniciado por alguna otra persona (al
menos que sea el root quien demande tal operación ;-))
- -l tty_line
- Indica la línea a ser eliminada (Requiere la
opción -k)
- -m mtu
- Configura la Unidad de Transferencia Máxima (MTU,
Maximum Transfer Unit) (296 por defecto)
- -p proto
- Configura el protocolo del línea. proto debe
ser uno de los siguientes: LIP, CSLIP, PPP o TERM.
- -t
- Ejecuta en modo de pruebas (ver MODO COMANDO
más adelante).
- -v
- Configura el modo verboso. Este permite varias impresiones
de depuración, incluyendo la escritura en pantalla de cada línea
del chat script.
MODO COMANDO¶
El primer uso posible de
dip es como un programa interactivo para
levantar una conexión IP saliente. Esto puede hacerse invocando
dip con la opción
-t la cual significa
y más precisamente, te lleva al
Modo de Comando (COMMAND-MODE)
del programa dip. Este hecho te será recordado por el prompt
DIP>
o bien, si también especificaste la bandera de depuración
-v te encontrarás con el prompt
DIP [NNNN]> Este
último prompt también muestra el valor actual de la variable global
$errlvl la cual se utiliza mayormente cuando dip corre en el modo
script Para el modo interactivo, puede ser usado para determinar si el
resultao del comando previo fue satisfactorio (OK) o no.
La siguiente es una muestra tomada desde una sesión viva:
$dip -t
DIP: Dialup IP Protocol Driver version 3.3.7n-uri (7 Mar 95)
Written by Fred N. van Kempen, MicroWalt Corporation.
DIP> _
Los comandos posibles se listan abajo (ver
COMANDOS). Note
particularmente el comando
help. Cada comando muestra un mensaje si
éste es invocado en forma incorrecta. Experimente un poco para ver el
efecto de esto, y eche un vistazo al archivo script de prueba, el cual
también utiliza este lenguaje de comandos. (Ver
EJEMPLOS).
MODO DIALOUT¶
La segunda forma de usar
dip es para iniciar conexiones salientes. Para
hacer las cosas más sencillas para la gente que tiene que manejar enlaces
de este tipo,
dip usa
chat script para levantar un enlace hacia
un sistema remoto. Esto da al usuario una enorme flexibilidad a la hora de
hacer la conexión, la cual, en otra circunstancia podría requerir
varias opciones de líneas de comando. El nombre de ruta del script para
ser ejecutado es entonces dado como un simple argumento de
dip. Si
scriptfile no tiene extensión de archivo,
dip
automáticamente agregará la extensión
".dip".
Esto es simplemente una manera de agrupar scripts en un único directorio.
MODO DIALIN¶
La tercera manera posible de usar
dip es como un shell de
autenticación (login shell) para conexiones IP entrantes, como si se
tratara de una conexión conmutada usando PPP o SLIP. Para hacer la
integración dentro del sistema UNIX existente tan fácil como sea
posible,
dip puede ser instalado simplemente nombrándolo como el
shell de autenticación (login shell) en
/etc/passwd. Una muestra
se vería como:
suunet:ij/SMxiTlGVCo:1004:10:UUNET:/tmp:/usr/sbin/diplogin
cuando el usuario
suunet logra autenticarse, el programa
login(1)
fija el directorio casa en
/tmp y ejecuta el programa
diplogin
diplogin debe ser un enlace simbólico a
dip, el cual quiere
decir que
dip debe ejecutarse en modo de entrada,
input
dip entonces trata de encontrar el nombre del usuario que se
autenticó (i.e el nombre correspondiente al identificador de usuario
actual, tal como es entregado por la llamada del sistema .BR getuid (2)) en su
archivo de base de datos. Un único argumento opcional al programa
dip en este modo puede ser el nombre de usuario que debe ser usado en
esta muestra, sin importar el identificador de usuario actual.
dip ahora examina
/etc/diphosts para una entrada para el nombre de
usuario dado. Este archivo contiene lineas de texto (muy similar al archivo
estándar de palabras clave). Toda línea que inicie con
# es
un comentario. De lo contrario, cada línea tiene siete elementos
separados por dos puntos, con el formato
user : password : remote host : local host : netmask :
comments : protocol,MTU
El primer campo de una línea es el nombre de usuario, el cual debemos
concordar.
El segundo campo puede contener una palabra clave cifrada. Si este campo no es
nulo,
dip despliega el mensaje "
External security
password:", y la respuesta debe concordar con la palabra clave en
este campo. Si el campo es "s/key" (verifica el valor de
SKEY_TOKEN en
dip.h) y
dip fue compilado con S/Key
habilitado, entonces la autenticación
dip se llevará a cabo.
(ver
README.SKEY en el directorio fuente
dip).
El tercer campo contiene el nombre (o la dirección IP pura) del
anfitrión remoto. Si se provee el nombre de un anfitrión, se
dará inicio con el proceso usual para resolver una dirección,
utilizando ya sea el nombre de un servidor o un archivo del anfitrión
local.
El cuarto campo contiene el nombre (o la dirección IP pura) del
anfitrión local. Si se provee un nombre de anfitrión, éste se
resuelve, tal como el nombre del anfitrión remoto en el tercer campo.
El quinto campo contiene la máscara de red en notación punto decimal
(como 225.255.255.0). Si está vacío, se utilizará por defecto
255.255.255.0.
El sexto campo puede contener cualquier texto. No es usado por
dip.
Finalmente, el séptimo campo de una línea contiene una mezcla de
banderas separadas por comas. Banderas posibles son:
SLIP para indicar que debemos usar el protocolo SLIP.
CSLIP Para indicar protocolo SLIP comprimido.
PPP Para indicar que debemos usar protocolo PPP.
number el cual nos da el parámetro MTU de esta conexión.
Por favor note: la experiencia muestra que bloques más pequeños
trabajan mejor. Usted *puede* definir MTU 1500, pero eso no va a responder por
su cordura !.
Después de encontrar la línea correcta
dip pone la línea
de la terminal en modo
RAW y solicita a la capa de red del sistema
localizar un canal del protocolo deseado. Finalmente, si el canal logra ser
activado, añade una entrada a la tabla de
ruteo del sistema para
hacer trabajar la conexión.
dip ahora entra en un lazo de letargo sin fin, el cual continúa
hasta que la conexión sea abortada físicamente (es decir, se bote la
linea). En ese momento,
dip elimina la entrada que había hecho en
la tabla de ruteo del sistema, y libera el canal de protocolo hasta ahora
usado para poder ser reusado. Éste entonces existe otra vez, haciendo
espacio para otra sesión.
COMANDOS¶
Los siguientes pueden aparecer en el script chat. La mayoría pueden ser
usados en el modo de comandos:
- label:
- Define una etiqueta.
- beep [times]
- Emite un sonido en la terminal del usuario [esto varias
veces]
- bootp [howmany [howlong]]
- Usa protocolo BOOTP para ir a buscar las direcciones IP
locales y remotas.
- break
- Envía un corte.
- chatkey keyword [code]
- añade a la colección de dip de palabras de
respuesta del módem. Por ejemplo,
chatkey CONNECT 1
duplicaría una de las entradas existentes
- config [interface|routing]
[pre| up|down|post] {arguments...}
- Guarda los parámetros de configuración de la
interfaz (esto puede ser deshabilitado por el administrador)
- databits 7|8
- Fija el número de bits de datos
- dec $variable
[decrement-value|$variable]
- Decrementa una variable. El valor por defecto de
decrement-value es 1.
- default
- Le dice a DIP que levante la ruta por defecto al
anfitrión remoto al cual hizo la conexión. Si este comando no
está presente en el archivo de comandos, la ruta por defecto no
será fijada/cambiada.
- dial phonenumber [timeout]
- Marca el número indicado. El valor por defecto de
timeout es de 60 segundos. dip extrae la cadena que regresa
el módem, y fija $errlvl de acuerdo con esta. Los codigos
estándar son los siguientes:
0 OK (correcto)
1 CONNECT (conectar)
2 ERROR (error)
3 BUSY (ocupado)
4 NO CARRIER (sin portadora)
5 NO DIALTONE (sin tono de marcar)
Usted puede cambiar o agregar a estos con el comando chatkey.
- echo on|off
- Habilita o deshabilita que se muestren loscomandos del
modem.
- exit [exit-status]
- Sale del script dejando intacta y establecida la
conexión [C]SLIP y dip corriendo.
- flush
- Vacía la entrada en la terminal.
- get $variable [value | ask |
remote [timeout_value | $variable]]
- Toma o solicita el valor de una variable. Si el segundo
parámetro es ask, se muestra un mensaje y el valor es
leído por la entrada estándar. Si este es remote, este se
lee desde la máquina remota. De otro modo, el segundo parámetro
es una constante o otra variable que provea el valor.
- goto label
- Tranfiere control a la etiqueta en el chat script.
- help
- Imprime una lista de comandos similar a esta
DIP> help
DIP knows about the following commands:
beep bootp break chatkey config databits
dec default dial echo flush get
goto help if inc init mode
modem netmask onexit parity password proxyarp
print port quit reset securidf securid
send shell sleep speed stopbits term
timeout wait
DIP> _
- if expr goto label
- Evalúa algún código resuelto. El expr
debe tener la forma
$variable op constant
donde op en una de: == != < > <= >=.
- inc $variable
[increment-value|$variable]
- Incrementa una variable. El valor por defecto de
increment-value es 1.
- init init-string
- Fija la cadena de inicio (enviada al módem antes del
marcado de entrada) a la cadena indicada (ATE0 Q0 V1 X1 por defecto)
Por favor úsela!
- mode SLIP|CSLIP|PPP|TERM
- Fija el protocolo de línea (SLIP por defecto)
- modem modem-name
- Fija el tipo de módem (El valor por defecto, y el
único valor legal en la actualidad es HAYES)
- netmask xxx.xxx.xxx.xxx
- Indica la máscara de red que queremos usar
- onexit .......
- La descripción se ha perdido - mire a través del
fuente en comman.c. O pregúntele a <inaky@@peloncho.fis.ucm.es>
- él lo escribió !.
- parity E|O|N
- Fija el tipo de paridad.
- password
- Pregunta por una palabra clave y la envía.
- proxyarp
- Solicita que sea fijado Proxy ARP
- print $variable
- Imprime el contenido de alguna variable.
- psend command [arguments]
- envía la salida de command al controlador
serial, pasando opcionalmente arguments a command. El UID es
reiniciado al verdadero UID antes de ejecutar command.
- port tty_name
- Fija el nombre del puerto de la terminal que se va a usar,
(Se asume la ruta /dev/)
- quit
- Sale con el estado de salida distinto de cero.
- reset
- Reinicia el modem (Envía "+++" y luego
"ATZ".)
- securidf fixedpart
- Guarda la parte fija del idenfificador seguro de la palabra
clave (SecureID password)
- securid
- Pregunta por la parte de la palabra clave generada por la
tarjeta "ACE System SecureID". La parte fija de la palabra clave
debe ya haber sido guardada usando un comando secureidf. Las
dospartes son concatenadas y enviadas al servidor remoto terminal.
- send text-string
- Envía una cadena al controlador serial.
- shell command [parameters]
- Ejecuta command a través del shell por defecto
(obtenido desde la variable de SHELL) con parameters como argumento
de la línea de comandos. La sustitución de variables de
Dip se realiza antes de la ejecución del comando. Si usted no
quiere que un parámetro que empiece por $ sea interpretado como una
variable de dip, anteceda este por \.
- skey [timeout | $variable]
- Este dice a dip que busque un envío de S/Key
desde el servidor terminal remoto. Nota del traductor: El párrafo
anterior es un poco ambiguo. Se adjunta el texto en inglés. Si
alguien tiene una mejor forma de traducirlo, favor comunicarmelo,
lsolano@sol.racsa.co.cr. "This tells dip to look for an S/Key
challenge from the remote terminal server." Entonces dip le
pregunta al usuario por la palabra clave secreta, genera la respuesta, y
la envía al anfitrión remoto. El parámetro opcional
timeout fija cuánto debe esperar dip para ver el
envío. $errlvl es fijado en 1 si el comando skey llega
al tiempo límite. Si skey envía una respuesta
exitosamente, $errlvl es fijado en 0. Requiere soporte de S/Key
para ser compilado.
- sleep time-in-secs
- Espera un momento.
- speed bits-per-sec
- Fija la velocidad del puerto (38400 por defecto) Note que
la velocidad actual asociada con "38400" puede ser cambiada
usando setserial(8).. Además, debes especificar aquí la
velocidad real de puerto, en vista que dip le pone
atención a set_hi y sus bits por sí mismo. También,
no te preocupes si pones la velocidad en "57600" y se reporta
otra vez en "38400" - todo está bien, las banderas
apropiadas se aplicaron y la velocidad real del puerto será la que
tú dijiste que debía ser, por ejemplo, "57600"
- stopbits 1|2
- Fija el número de bits de parada.
- term
- Inicia un modo terminal.
- timeout time-in-sec
- Fija el tiempo límite. Este define el periodo de
inactividad de la línea, después del cual DIP forzará la
línea a romper la conexión (y salir).
- wait text [timeout_value |
$variable]
- Espera por la llegada de alguna cadena.
VARIABLES ESPECIALES¶
- $errlvl
- Mantiene el resultado del comando previo.
- $locip
- Número IP del anfitrión local en notación
puntual (por ejemplo, 128.96.41.50).
- $local
- Nombre completo en palabras del anfitrión local (por
ejemplo sunsite.unc.edu).
- $rmtip
- Número IP del anfitrión remoto en notación
punto.
- $remote
- Nombre completo en palabras del anfitrión remoto.
- $mtu
- Unidad de Transferencia Máxima (máximo
número de bytes transferidos de forma simultánea)
- $modem
- Tipo de modem (en la actualidad, el único valor
válido es HAYES)
- $port
- El nombre del puerto de la terminal que se va a usar. (Se
asume la ruta /dev/)
- $speed
- tasa de transferencia entre el anfitrión local y el
modem, en bits/seg.
EJEMPLOS¶
He aquí un ejemplo
/etc/diphosts:
#
# diphost Este archivo describe un mapeo de nobres a direcciones
# para el porgrama DIP. Se usa para determinar cuál
# dirección IP del anfitrión usar en caso de una llamada entrante
# de un usuario.
#
# Versión: @(#)diphosts 1.20 05/31/94
#
# Autor: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
# Modificado: Uri Blumenthal <uri@watson.ibm.com>
# Traducido al Español: Luis Carlos Solano <lsolano@sol.racsa.co.cr>
#
# name : pwd : hostname : local server: netmask: comments : protocol,mtu
#==================================================
sbonjovi::bonjovi:server1:netmask:MicroWalt "bonjovi" SLIP:SLIP,296
sroxette::roxette:server2:netmask:MicroWalt "roxette" SLIP:CSLIP,296
stephen:s/key:tuin:server3:netmask:S/Key Authenticated login:CSLIP,296
# End of diphosts.
Un chat script se vería similar a esto:
#
# sample.dip Programa de soporte para conecxiones IP conmutadas
#
# Versión: @(#)sample.dip 1.40 07/20/93
#
# Autor: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
# Traducido al Español: Luis Carlos Solano <lsolano@sol.racsa.co.cr>
#
main:
# Primero que todo, fijar nuestro nombre para esta conexio´n.
# Me llamo "uwalt.hacktic.nl" (== 193.78.33.238)
get $local uwalt.hacktic.nl
# Siguiente, fijar el nombre y dirección del otro lado
# Mi máquina a la que llamo tiene por nombre 'xs4all.hacktic.nl' (== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Fijar la máscara de red en sl0 a 255.255.255.0
netmask 255.255.255.0
# Fijar el puerto serial deseado y su velocidad
port cua02
speed 38400
# Reinicial el modem y la línea terminal
# Esto parece causarle poroblemas a algunas personas !
reset
# Nota: Valores "errlvl" pre-definidos "estándares"
# 0 - OK (correcto)
# 1 - CONNECT (conectar)
# 2 - ERROR (error)
# 3 - BUSY (ocupado)
# 4 - NO CARRIER (sin portadora)
# 5 - NO DIALTONE (sin tono de marcar)
#
# puedes cambiar esto cpm el comando chatkey
# Prepárese para el marcado.
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble
# Estamos conectados. Autentíquese en el sistema.
# We are connected. Login to the system.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_error
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:
# Estamos autenticados
wait SOMETEXT 15
if $errlvl != 0 goto prompt_error
# Fijar los parámetros de operación de SLIP.
get $mtu 296
# Garantizar que "route add -net default xs4all.hacktic.nl" se hará el valor por defecto
# Say hello and fire up!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit
prompt_error:
print TIME-OUT waiting for SLIPlogin to fire up...
goto error
login_trouble:
print Trouble waiting for the Login: prompt...
goto error
password_error:
print Trouble waiting for the Password: prompt...
goto error
modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit 1
exit:
exit
Este script causa que
dip conmute a un anfitrión, se autentique, y
consiga un canal activo de interfaz
SLIP (de la misma manera como si se
tratara de conexiones entrantes). Cuando todo esté establecido en forma
correcta, simplemente se va al fondo (background) y espera hasta que se
cuelgue la comunicación (o una simple señal letal), con la cual se
cuelga y sale.
ARCHIVOS¶
/etc/passwd
/etc/diphosts
/etc/rc.dip (para un ejemplo)
FALLOS¶
Virtualmente ninguno - lo que ves son
características (:-).
AUTORES¶
Fred N. van Kempen <waltje@uwalt.nl.mugnet.org>,
Uri Blumenthal <uri@watson.ibm.com>,
Paul Cadach <paul@paul.east.alma-ata.su>,
John Edwards <pje120@cs.usask.ca>,
Olaf Kirch <okir@monad.sub.de>,
Pauline Middelink <middelin@calvin.iaf.nl>,
Paul Mossip <mossip@vizlab.rutgers.edu>,
Bill Reynolds,
Jim Seagrave <jes@grendel.demon.co.uk>,
Stephen Shortland <stephen@cork.cig.mot.com>,
Daniel Suman,
Jeff Uphoff <juphoff@aoc.nrao.edu>
VÉASE TAMBIÉN¶
login(1),
skey(1),
getuid(2),
dial(3),
ifconfig(8),
netstat(8),
route(8),
setserial(8)