Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Desarrollo de una Herramienta Software para el Acceso a Redes TCP/IP a través de la Red Telefónica Conmutada

Última Actualización: 30 de Junio de 1.996 - Domingo

Capítulo 15:
El Módulo Principal

El módulo principal es el encargado de inicializar todo el sistema y lanzar los procesos de aplicación. Se hace cargo también de la gestión inicial del MODEM (secuencia de marcación y navegación automática a través de los menús) y de la configuración de todos los procesos. Finalmente hace de puerta de entrada a las aplicaciones DNS, TELNET, FTP, SMTP y POP3.


Interfaz

La interfaz de programación de este módulo consta de una única rutina:


int main(int argc,char *argv[]);

Esta rutina ejecuta todo el resto del programa. Retorna cuando el software termina su ejecución, devolviendo siempre el valor cero. Acepta un único argumento a través de la línea de comandos, que será el "path" de acceso al fichero de configuración que queremos utilizar.

Dicho fichero contiene órdenes para la gestión del MODEM y la configuración del sistema. La sintaxis del fichero es como sigue:


  fichero = dial login init EOF
  dial = [(comentario | asignación | línea_dial)...] "end_dial\n"
  login = [(comentario | asignación | línea_login)...] "end_login\n"
  init = [(comentario | asignación | línea_init)...] "end_init"

  comentario = "#" [carácter_imprimible...] "\n"
  carácter_imprimible = ("\32".."\126") | ("\128".."\255")
  asignación = variable "=" valor
  valor = variable | cadena | palabra | número
  variable = "$" palabra
  palabra = alfa [alfanum...]
  alfa = ("a".."z") | ("A".."Z") | "_"
  alfanum = alfa | ("0".."9")
  cadena = "\"" [carácter_imprimible] "\""
  número = ("0".."9")...
  línea_dial = (("serial_port" palabra) | ("wait" número) |
                ("hangup" cadena) | ("prefix" palabra) |
                ("init" palabra) | ("connect_wait" número) |
                ("redial_wait" número) | ("phone_number" número) |
                ("success" palabra | cadena) |
                ("failure" (palabra | cadena)...)
               ) "\n"

  línea_login = (("cwait" número cadena...) | ("send" cadena) |
                 ("wait" número) | ("get" variable)
                ) "\n"

  línea_init = (("aloc_mem" nvalor) | ("set_ip" nvalor) |
                ("mss" nvalor) | ("mtu" nvalor) | ("mru" nvalor) |
                ("dns_server" cvalor) | ("gateway" cvalor) |
                ("user" cvalor) | ("password" cvalor) |
                ("protocol" cvalor)
               ) "\n"

  nvalor = variable | número
  cvalor = variable | cadena | palabra


  • SERIAL_PORT

    Mediante su parámetro indica qué puerto se va a utilizar: "COM1", "MIDI" o "LAN".

  • WAIT

    Espera el tiempo especificado en milisegundos.

  • HANGUP

    Este comando indica qué texto envía el MODEM cuando cierra la conexión. Normalmente "NO CARRIER".

  • PREFIX

    Indica el texto que debe enviarse al MODEM cuando se quiere marcar un número de teléfono.

  • INIT

    Cadena de inicialización enviada al MODEM. Habitualmente este comando debe ser seguido de un "WAIT" para esperar a que el MODEM esté listo.

  • CONNECT_WAIT

    Si no se establece la conexión tras ese tiempo (sin ninguna clase de fallo), pediremos al MODEM que cuelgue. La duración viene dada en milisegundos.

  • REDIAL_WAIT

    Tiempo entre reintentos, en milisegundos

  • PHONE_NUMBER

    Número de teléfono del proveedor.

  • SUCCESS

    Si el MODEM nos envía alguna de las palabras especificadas, pasamos a la fase de entrada en el sistema (típicamente "CONNECT").

  • FAILURE

    Si el MODEM nos envía el texto especificado, colgamos y volvemos a intentarlo tras el tiempo especificado con "REDIAL_WAIT". Normalmente "NO CARRIER", "NO DIALTONE" o "BUSY".

  • CWAIT

    El primer parámetro indica cuánto tiempo dejamos transcurrir, como máximo (milisegundos), hasta que aparezca en los datos recibidos alguna de las palabras especificadas. La primera de ellas indica éxito y el programa proseguirá hasta el siguiente paso. El resto de las palabras indicará fracaso y abortarán la conexión.

  • SEND

    Envía los datos especificados. Se transmiten tal cual. Si queremos incluir también retornos de carro y/o saltos de línea tendremos que utilizar las secuencias "\r" y "\n", respectivamente.

  • GET

    Lee la entrada desde el primer carácter no espacio o salto de línea hasta el primer carácter espacio o salto de línea. La palabra resultante se asignará a una variable.

  • ALOC_MEM

    Especifica el número de bytes con el que debemos inicializar el módulo de memoria.

  • SET_IP

    Fija nuestra dirección IP al valor dado.

  • MSS

    Fija el tamaño máximo de los segmentos TCP. Si el valor indicado no es coherente con las limitaciones internas, se asigna un valor por defecto.

  • MTU

    Fija el tamaño de la unidad máxima de transferencia IP. Si el valor indicado no es coherente con las limitaciones internas, se asigna un valor por defecto.

  • DNS_SERVER

    El parámetro contendrá la dirección IP del servidor de nombres a utilizar.

  • GATEWAY

    El parámetro indica la dirección IP de la pasarela a utilizar para acceder a las máquinas fuera de nuestra red.

  • USER

    Nombre de usuario utilizado para la autentificación PPP.

  • PASSWORD

    Clave asociada, utilizada para la autentificación PPP.

  • PROTOCOL

    Selecciona el protocolo de línea. Debe ser "SLIP" o "PPP".

Una vez que la herramienta software ha accedido al sistema se dispondrá de nueve canales independientes, accesibles a través de las teclas de función. Cada uno de los canales puede gestionar una conexión TELNET, FTP, SMTP o POP3, según lo que seleccione el usuario.


Implementación

La implementación actual del módulo principal consiste, básicamente, en dos partes: un marcador ("dialer") y el sistema de gestión de protocolos de aplicación.

El marcador es el responsable de acceder al sistema remoto, de autentificarnos ante él y de configurar todo el sistema. El sistema de gestión de protocolos de aplicación, como su nombre indica, permite al usuario la interación con las diferentes aplicaciones. Escribiendo "pop3 jucar.ait.uvigo.es", por ejemplo, la herramienta intenta la conexión al subsistema POP3 del Area de Ingeniería Telemática de la Universidad de Vigo. Los comandos existentes en la actualidad son: "telnet", "ftp", "smtp", "pop3", "close" y "exit". Si no se indica ningún puerto, cada protocolo se conectará a su puerto por defecto.

Para cambiar entre canales el usuario pulsa las teclas de función asociadas. Si desea cerrar una conexión de forma imperativa debe pulsar "F10" y escribir "close <canal>", donde "<canal>" se corresponde al canal asociado a la conexión que deseamos clausurar.

Todas las interacciones y errores consideradas de interés son almacenadas en un fichero "LOG".

Este módulo es, con diferencia, el más independiente de la herramienta en sí y, al mismo tiempo, constituye la interfaz que ve el usuario. Por ello se recomienda que los usuarios con unos conocimientos de programación mínimos se decidan a realizar sus propios módulos principales.

El objetivo de este Proyecto Fin de Carrera consiste en el desarrollo de una librería TCP/IP para su utilización por terceras partes. En ese sentido este módulo resulta completamente prescindible. Su utilidad se pone de manifiesto si se considera que no existen aún aplicaciones externas que utilicen las facilidades de la herramienta, pero es previsible que pronto se dispongan de aplicaciones diversas que hagan innecesario este módulo.


Bibliografía


[KA9Q-CFG]  Formato de los ficheros de configuración del paquete
            de software KA9Q-NOS
            Phil Karn, KA9Q

[LABCD]     Laboratorio de Comunicación de Datos
            Curso 94-95. Vigo, 16 de Marzo de 1.995
            Alvaro Manuel Gómez Vieites
            Carlos Gabieiro Martínez
            Jose Cadavid Jáuregui
            Jesús Cea Avión

[POWERNET]  Proyecto PowerNet
            Jesús Cea Avión
            Implementación de multitarea cooperativa en lenguaje C
            11 de Abril de 1.990

[STIK-CFG]  Formato de los ficheros de configuración del software
            STiK
            Steve Adam.
            27 de Septiembre de 1.995



Python Zope ©1996 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS