UNIVERSIDAD FRANCISCO GAVIDIA

Tecnología, Humanismo y Calidad
DIRECCION DE POSTGRADOS Y EDUCACION CONTINUA

Trabajo de graduación: “Sistema WDS para la Administración remota de servidores”
TRABAJO DE GRADUACION PREPARADO PARA LA UNIDAD DE POSTGRADOS PARA OPTAR AL TITULO DE:

MAESTRO EN INFORMATICA APLICADA EN REDES
Presentan: Leyla Dinora Rivera Rivera Hugo Miguel Colato Rodríguez Nelson Antonio Tesorero

OCTUBRE – 2007 SAN SALVADOR – EL SALVADOR – CENTROAMERICA

Maestría en Informática Aplicada en Redes

RESUMEN
El siguiente documento presenta la propuesta para la administración remota de los servicios que presta uno o más servidores, por medio del sistema llamado “Sistema Redundante para la Administración Remota de equipos Servidores – WDS (Sistema de Perro Guardián por sus siglas en inglés). Dicha propuesta surge, en el marco actual en el que la administración de servicios y la solución de fallas de un equipo servidor generalmente se da “in situ”, es decir que el administrador debe estar presente en el lugar donde se encuentra ubicado el equipo servidor, para resolverlas. Esta manera de administrar dependiendo del tipo de empresa y del tipo de servicios prestados a sus clientes, puede resultar no factible e ineficiente. Existen en el mercado algunas soluciones de monitoreo para algunos servicios que prestan los equipos servidores, sin embargo, por lo general, son muy limitados y muy poco configurables, en cuanto a ir extendiendo los servicios que pueden monitorear. La mayor desventaja es que estos sistemas de monitoreo, en general no permiten la solución al problema detectado. WDS es un sistema capaz de monitorear y controlar los servicios que presta uno o mas servidores por medio de mensajes de texto SMS vía teléfono celular, es altamente configurable e interactivo. Por el tipo de tecnología utilizada es una solución que ofrece economía, seguridad y movilidad. Las partes que componen el presente trabajo son las siguientes: Marco teórico el cual nos proporciona los conocimientos para entender como funciona el proyecto WDS; un análisis de la situación actual de la administración de servidores; la propuesta de solución, explica por medio de casos de uso, diagramas de secuencia y otro tipo de gráficos la forma de resolver el problema y justifica la elección de la tecnología utilizada; la metodología, va detallando la instalación y configuración de todos y cada uno de los componentes del proyecto WDS, indicando los pasos a seguir para su correcto funcionamiento. Finalmente las pruebas realizadas para demostrar la funcionalidad de este proyecto.

Página 2 de 82

Maestría en Informática Aplicada en Redes

Índice

Introducción .................................................................................................................... 4 Objetivos .......................................................................................................................... 6 I. Marco conceptual ...................................................................................................... 7 1.1 SMS.................................................................................................................... 7 1.2 SMSC ................................................................................................................. 7 1.3 Proyecto Gammu ............................................................................................. 8 1.4 MySql ............................................................................................................... 16 1.5 Java .................................................................................................................. 18 1.6 Eclipse.............................................................................................................. 22 1.7 Lomboz ............................................................................................................ 28 1.8 Hibernate ......................................................................................................... 28 1.9 PERL ................................................................................................................ 30 II. Análisis del problema............................................................................................ 32 2.1 Situación actual .............................................................................................. 32 2.2 Planteamiento del problema......................................................................... 34 III. Propuesta de solución ......................................................................................... 38 3.1 Diagrama de contexto (Nivel 0) ................................................................... 38 3.2 Diagrama de nivel 1 ....................................................................................... 40 3.3 Diagrama de nivel 2 ....................................................................................... 41 3.4 Software a utilizar:.......................................................................................... 43 IV. Metodología ....................................................................................................... 45 4.1 Estructura de Carpetas y archivos del sistema WDS .............................. 45 4.2 Requisitos del sistema WDS ........................................................................ 48 4.3 Instalación y configuración del proyecto WDS y de GAMMU................. 48 4.4 Scripts del sistema WDS............................................................................... 50 4.5 Aplicación Java............................................................................................... 57 V. Prototipo y resultados alcanzados ................................................................... 67 VI. Conclusiones generales ...................................................................................... 71 Bibliografía..................................................................................................................... 72 Anexos ............................................................................................................................ 72

Página 3 de 82

Maestría en Informática Aplicada en Redes

Introducción
Existen en la actualidad una variedad de situaciones que se dan en la administración de servidores, con el propósito de que estos se mantengan funcionando adecuadamente. Por lo general, cuando se dan fallas en los servicios estos se resuelven de manera presencial por el(los) administrador(es). Los costos para mantener los servidores de una institución trabajando de una forma adecuada, son elevados, sobre todo cuando se sirven una gran cantidad de servicios, si son sistemas 7/24 o si se trabaja de forma distribuida. Por lo anteriormente mencionado se necesita una solución que nos permita administrar remotamente un servidor (o mas), de tal manera que se pueda tomar control de el, desde cualquier lugar y a cualquier hora que se necesite monitorear y/o solucionar fallas. Existen opciones para tomar control de un servidor de manera remota pero implican tener a acceso a los servidores vía Internet, lo cual es inseguro, ya que exponemos a los servidores a que sean accedidos con fines no deseados y para evitar esto, se tiene que hacer una fuerte inversión en infraestructura DMZ, o bien, acceder a este, a través de una VPN. Todo esto vuelve muy complicado pensar en la administración de los servidores de forma remota. El propósito de este trabajo es mostrar la factibilidad técnica de administrar uno o más servidores de manera remota haciendo uso de la tecnología inalámbrica por medio de mensajes de texto SMS. El proyecto WDS es una solución que se basa en el proyecto de código abierto Gammu, el cual, es un proyecto que abarca aplicaciones, scripts y drivers para administrar varias funciones de teléfonos celulares y que también posee un esquema de base de datos, para el manejo de los mensajes SMS. WDS posee las siguientes características: • El administrador puede enviar comandos y recibir el resultado de dicha acción, es decir, recibir una respuesta desde el servidor sobre el resultado de este comando. • El administrador puede ir agregando más servicios a controlar al proyecto WDS.

Página 4 de 82

ya que posee dentro de sus parámetros configurables el listado de teléfonos admitidos. de tal manera que este puede perfectamente iniciar. Además la estructura que debe poseer el mensaje a ser enviado por el administrador. • En términos de costos económicos. los ignora. independientemente del lugar en que este se encuentre. es una solución que ofrece grandes ventajas. inversión en infraestructura de comunicaciones y además ahorra los costos en recurso humano. la administración remota de servidores. ya que no necesita conectividad a Internet. así como aquellos teléfonos que deseamos deben ser excluidos para recibir mensajes SMS. detener o reiniciar cualquier servicio. En términos de seguridad el proyecto ofrece mecanismos para recibir o no mensajes de determinados teléfonos. en cualquier hora y en cualquier día del año. pero puede ser adaptado para el control remoto de otros procesos. Página 5 de 82 . WDS es un proyecto que brinda comunicación entre el administrador y el servidor. manejándolo como un ‘error’. La aplicación que se le da a WDS para este caso fue. es tal que.Maestría en Informática Aplicada en Redes • • Por el tipo de tecnología utilizada el administrador puede monitorear y controlar al servidor desde cualquier lugar a cualquier hora. WDS ejecutara aquellos mensajes que poseen dicha estructura y si no.

independiente de que el administrador tenga acceso a una PC. por medio de un teléfono celular. • Desarrollar un sistema capaz de monitorear y controlar los servicios que presta uno o más servidores. a través de mensajes de texto SMS. Página 6 de 82 .Maestría en Informática Aplicada en Redes Objetivos • • Desarrollar un sistema capaz de lograr interacción en dos vías entre el administrador físico y un equipo servidor. Aprovechar las ventajas que brindan las comunicaciones inalámbricas como son la movilidad. para lograr la administración remota de uno o mas equipos servidores. por medio de un teléfono celular.

pero siempre siendo el configurado en la SMSC el determinante. 1. En el momento que un usuario envía un mensaje de texto (SMS) a otro usuario lo que sucede es que el teléfono envía el mensaje a la SMSC correspondiente al operador del usuario remitente. cuya función es enviar y recibir mensajes de texto. el mensaje es descartado. dentro de los cientos de parámetros configurables que se puede modificar.1 SMS El servicio de mensajes cortos o SMS (Short Message Service) es un servicio disponible en los teléfonos móviles que permite el envío de mensajes cortos (también conocidos como mensajes de texto) entre teléfonos móviles. SMS fue diseñado originalmente como parte del estándar de telefonía móvil digital GSM. Para la transmisión y recepción de mensajes SMSs. Página 7 de 82 . incluyendo las redes 3G.2 SMSC Corresponde a las siglas en inglés Short Message Service Center (Central de Servicio de Mensajes Cortos). las SMSCs utilizan interfaces de red convencionales. Marco conceptual 1. así como algunos protocolos desarrollados específicamente para las comunicaciones de red móviles. dispone de un tiempo máximo durante el cual el mensaje es guardado.Maestría en Informática Aplicada en Redes I. teléfonos fijos y otros dispositivos de mano. La SMSC guarda el mensaje y lo entrega a su destinatario cuando este se encuentra en cobertura. pero en la actualidad está disponible en una amplia variedad de redes. si durante este tiempo el destinatario no es localizado. También el usuario remitente puede especificar este tiempo. Por lo general la SMSC. es un elemento de la red de telefonía móvil.

Maestría en Informática Aplicada en Redes

1.3

Proyecto Gammu

Gammu es un proyecto que derivo de gnokii (gnokii.org) que en sus inicios solo daba soporte a celulares Nokia; pero evolucionó a otra variedad de marcas logrando comunicación por cable, irda (infrarrojo) y Bluetooth. La herramienta Gammu es un proyecto que abarca aplicaciones, scripts y drivers para administrar varias funciones de teléfonos celulares y otros dispositivos similares. Gammu permite al usuario acceder al sistema de archivos del teléfono celular y a las funcionalidades especiales de control, como radios o cámaras integradas. Esta herramienta se configura editando el archivo de configuración “gammurc” del directorio de usuario, o bien, en /etc/gammurc para todos los usuarios. Gammu también tiene la capacidad de enviar y recibir mensajes SMS (Servicio de Mensajes cortos) por medio del demonio denominado SMSD. Para ejecutarlo se tiene que editar primero el archivo de configuración de dicho demonio smsdrc, configurar ciertas características de este modo de trabajo en tablas para configuración en la base de datos smsd; finalmente ejecutar el script gammu.sh en background desde la línea de comandos. El paquete de instalación de Gammu en su ultima o previas versiones se puede obtener desde su sitio oficial http://www.gammu.org Gammu puede ser configurado para trabajar en dos modos: • • Archivos – Los mensajes SMS se leen y almacenan en archivos de disco MYSQL – Los mensajes SMS se leen y almacenan en una base de datos

Configuración SMSD: El archivo de configuración smsdrc puede estar ubicado en cualquier directorio y ser guardado con cualquier nombre. Por defecto el archivo de configuración smsdrc se ubica en el directorio docs/examples/config/ que viene en el paquete de instalación de Gammu. Su formato es el mismo utilizado en el archivo de configuración principal (gammurc). Si el archivo smsdrc no es definido en la línea de comando los valores de configuración son leídos desde gammurc.

Página 8 de 82

Maestría en Informática Aplicada en Redes

[gammu] port = /dev/ttyS1 model = 6110 connection = dlr3 #synchronizetime = yes logfile = gammulog logformat = textall use_locking = yes #gammuloc = gammu.us #startinfo = yes El símbolo “#” nos indica que esa la línea se tomará como un comentario o parte de documentación, si fuera necesario fijar algún dato diferente a estos por defecto definidos se deben especificar en este archivo. #[include_numbers] #number1 = 1234 Removiendo los comentarios a la sección anterior es posible definir números de teléfonos desde los cuales se podrán recibir mensajes tal que mensajes entrantes de otros números telefónicos no definidos en este apartado serán eliminados, actuando en alguna manera de forma inteligente. #[exclude_numbers] #number1 = 1234 Al quitar el comentario de la sección anterior es posible indicar a gammu de qué números de teléfonos no se procesaran mensajes entrantes, es decir esta sería tomada como la definición de la “Lista negra de teléfonos”. Configuración de Gammu en el modo SMSD Definiciones de variables de configuración para el contenedor de bases de datos Mysql, como dirección del servidor de base de datos, nombre de la base de datos, usuario y clave deben definirse en el archivo de configuración smsdrc. Ejemplo: user = root password = maestriaufg

Página 9 de 82

Maestría en Informática Aplicada en Redes

pc = localhost database = smsd Para que la aplicación Gammu pueda tener acceso a los recursos de la base de datos es necesario definir ciertos privilegios al usuario de conexión. Para la tabla de recepción de mensajes SMS • • • •
PIN logfile

Tabla Inbox - INSERT Tabla Outbox - SELECT, INSERT, DELETE y UPDATE Tabla Outbox_MultiPart - SELECT, INSERT y DELETE Tabla SentItems - INSERT y UPDATE
Numero PIN de la tarjeta SIM del teléfono celular Nombre del archivo Log para información acerca de las acciones del modulo smsd.

Para enviar mensajes SMS:

Otros parámetros para la configuración general son:

CommTimeout

Define un tiempo en segundos que smsd espera para volver a repetir un lazo de lectura escritura nuevamente. Por defecto: 1 respuesta de la red

SendTimeout

Muestra cuantos segundos smsd esperará por sms lo reenviará. Por defecto: 10

durante el envió del mensaje de texto. Si no ocurre nada en este tiempo,

receivefrequency

Frecuencia de recepción. El número de segundos entre pruebas para recibir mensajes, cuando el teléfono esta ocupado enviando mensajes SMS. Normalmente esta prueba de recepción de mensajes se hace en el tiempo estipulado en commtimeout y después de cada mensaje enviado. Por defecto: 0 (No utilizado)

deliveryreport

Reportes de entrega. Si se utilizan reportes de entrega (log). Opciones: no/log/sms. log: Una línea de entrada de registro(log), sms: Almacenado en inbox como un mensaje de texto, Por defecto: no

phoneid

Identificación del teléfono utilizado para enviar y recibir mensajes SMS.

Ejemplo de configuración general: [smsd] PIN = 1234

Página 10 de 82

Maestría en Informática Aplicada en Redes

logfile = smsdlog commtimeout = 1 sendtimeout = 10 #receivefrequency = 0 #resetfrequency = 0 #deliveryreport = no #phoneid = MyPhone1 El script para la creación de la estructura de la base de datos de Gammu se encuentra en el paquete de instalación en la siguiente ruta: docs/examples/config/mysql.sql. Descripción de la estructura de la base de datos de GAMMU. Tabla Inbox Tabla en la que se almacenan los mensajes entrantes (SMS)
Campo UpdatedInDB ReceivingDateTi me Text SenderNumber Coding Text Varchar(20) Timestamp Timestamp Tipo Descripción Fecha y hora en que se da una actualización del usuario, demonio, etc. Hora y fecha en que un mensaje SMS fue recibido Mensaje de texto codificado en Hexadecimal Numero de teléfono (decodificado) que envía el mensaje. enum('Default_No_Compres Tipo de codificación del mensaje de texto. sion',’Unicode_No_Compres sion','8bit','Default_Compres sion','Unicode_Compression ') UDH SMSCNumber Texto Varchar(20) Cabecera de datos de usuario codificado Numero decodificado de la central de servicio de mensajes cortos

Página 11 de 82

etc.Maestría en Informática Aplicada en Redes Campo Class TextDecoded ID RecipientID Processed Int(11) Tipo Clase SMS or -1 Descripción Varchar(160) Integer (11) Texto enum('false'. 'Unicode_No_Compression'. 'Unicode_Compression') UDH Class Text Int(11) Cabecera de datos del usuario codificado usando valores hexadecimales. '8bit'. demonio. SendingDateTime Timestamp Página 12 de 82 . Text DestinationNumb er Coding sion'. Clase SMS or -1 Texto Varchar(20) Mensaje de texto codificado usando valores Hexadecimales. Número de teléfono (decodificado) del destinatario del mensaje enum('Default_No_Compres Tipo de codificación del mensaje de texto. Campo UpdatedInDB InsertIntoDB Timestamp Timestamp Tipo Descripción Fecha y hora en que se da una actualización del usuario. Fecha y hora fijada en el momento de un Insert Campo en el que se fija algún valor. Cuando buscamos forzar el envío después de un tiempo planificado. Por defecto Alfabeto/Unicote SMS) Identificador del mensaje SMS (Para utilizar con aplicaciones externas) Identificador del demonio de gammu que lo ha agregado Utilizado para marcar si un mensaje SMS fue procesado o no. Tabla Outbox Tabla para un mensaje SMS (o el primer mensaje de una secuencia) esperando para ser enviado. 'true') Mensaje de texto (SMS) decodificado. 'Default_Compression'.

No asignada.'no') Descripción Mensaje de texto en forma legible para el humano. CreatorID Text Puede usarse para agregar información sobre un proceso. El valor que contenga este campo será enviado por SMSD Utilizado por SMSD para sus propios objetivos Cuando el valor ‘default’ es utilizado. Identificación de secuencia SMS/SMS. Informa. Tipo de codificación del mensaje de texto. Esta es copiada para Sent_Items "as is" Tabla Outbox_multipart Tabla para la segunda y próxima secuencia de SMS esperando para ser enviados.'true') Integer (11) Text Timestamp enum('default'.'Unicode_No_Compr ession'. 'Unicode_Compression').Maestría en Informática Aplicada en Redes Campo TextDecoded ID MultiPart RelativeValidity SenderID SendingTimeOut DeliveryReport Tipo Varchar(160) Integer (11) enum('false'. si hay más SMS de esta secuencia en la tabla Outbox_Multipart. el Reporte de entrega es utilizado o no de acuerdo a la configuración de la instancia SMSD. ‘yes’ fuerza el Reporte de entrega.'Default_Compression' . que secuencia SMS/SMS agregar dentro de la base de datos. '8bit'. Validez relativa del SMS como codificación utilizando especificaciones GSM. Página 13 de 82 . Campo Text Coding Text enum('Default_No_Compre ssion'. Tipo Mensaje de Descripción texto codificado usando valores Hexadecimales.'yes'.

etc. 'DeliveryUnknown'. demonio. esta entrada contiene la hora en que este reporte fue recibido. DeliveryDateTime Timestamp Cuando el reporte de envío fue utilizado por SMS. Campo UpdatedInDB InsertIntoDB SendingDateTime Tipo Timestamp Timestamp Timestamp Descripción Fecha y hora en que se da una actualización del usuario. cuando se desea forzar a el envío después de un tiempo previsto. Status enum('SendingOK'. 'SendingOKNoReport'. ¿Cuál es número SMS en la secuencia SMS? varchar(160) Int(11) unsigned Int(11) Tabla Sent_items Tabla para SMS enviados. StatusError Int(11) Cuando el reporte de envío fue utilizado por SMS. esta entrada contiene código de error legible por el humano. 'DeliveryOK'. Fecha y hora fijada en el momento de un Insert Fijarlo a un cierto valor. esta entrada contiene códigos de error como las especificaciones GSM Text DestinationNumber Text Varchar(20) Texto SMS codificado usando valores hexadecimales. 'DeliveryFailed'.Maestría en Informática Aplicada en Redes Campo UDH Class TextDecoded ID SequencePosition Text Int(11) Tipo Descripción Cabecera de datos del usuario codificado usando valores hexadecimales. 'SendingError'. Clase SMS or -1 Mensaje de texto en forma legible para el humano. 'Error') Cuando el reporte de envío fue utilizado por SMS. Numero de destino decodificado para SMS Página 14 de 82 . 'DeliveryPending'. Identico significado para valores en la tabla Outbox Información.

Página 15 de 82 . inboxpath Donde los mensajes SMS recibidos son almacenados. 'Default_Compression'. Tipo enum('Default_No_Compre 'Unicode_No_Compression' . UDH SMSCNumber Class TextDecoded ID SenderID SequencePosition TPMR RelativeValidity CreatorID Texto Varchar(20) Int(11) varchar(160) Int(11) Text Int(11) Int(11) Int(11) Text Cabecera de datos del usuario codificado con valores hexadecimales.SMS ID ¿Qué instancia de SMSD envió esta única secuencia. No asignado . por defecto el directorio actual. Numero decodificado de la central de servicio de mensajes cortos Clase SMS ó -1 Texto SMS en forma legible al humano.Maestría en Informática Aplicada en Redes Campo Coding ssion'. 'Unicode_Compression') Descripción Texto codificado SMS. Número SMS en secuencia SMS Mensajes Validación de referencia Relativa como utilizando especificaciones GSM especificaciones GSM Copiado de CreatorID desde la tabla Outbox (y contiene cualquier información put por los usuarios con acceso a la base de datos) Modo de Archivos Configuración Las siguientes rutas pueden ser utilizadas con el trailing “/” o “\” dependiendo del sistema operativo. '8bit'.

Por defecto: unicode.4 MySql MySQL. por defecto outboxpath(= deleted) errorsmspath Donde los mensajes SMS con error en la transmisión sentsmspath. distribuye y soporta MySQL AB. fundada por los desarrolladores de MySQL. lo desarrolla.'unicode'. El formato 'detail' es el formato utilizado por backup. Página 16 de 82 . MySQL AB es una compañía comercial. por defecto el directorio actual. sentsmspath Donde los mensajes SMS transmitidos son ubicados. Por defecto: auto Ejemplo: Inboxpath = /var/spool/sms/inbox/ outboxpath = /var/spool/sms/outbox/ sentsmspath = /var/spool/sms/sent/ errorsmspath = /var/spool/sms/error/ inboxformat = unicode transmitformat = auto 1.Maestría en Informática Aplicada en Redes outboxpath Donde los mensajes SMS a ser enviados deberían ser ubicados. el sistema de gestión de bases de datos SQL Open Source más popular. 'unicode'. '7bit'. están ubicados.'standard' es el juego de caracteres estándar. Es una compañía Open Source de segunda generación que une los valores y metodología Open Source con un exitoso modelo de negocio. 'standard'. por defecto inboxformat El formato en que el mensaje SMS será almacenado: ‘detail’. transmitformat El formato para transmitir el SMS: 'auto'.

Si no se desea utilizar la licencia GPL o se necesita añadir código MySQL en una aplicación comercial. Open Source significa que es posible para cualquiera usar y modificar el software. se puede comprar la licencia comercial. para definir lo que se puede y no se puede hacer con el software en diferentes situaciones. acceder. Puede ser cualquier cosa. • MySQL es un sistema de gestión de bases de datos Una base de datos es una colección estructurada de datos.Maestría en Informática Aplicada en Redes El sitio Web MySQL (http://www. Al ser los computadores muy buenos en tratar grandes cantidades de datos. Esto añade velocidad y flexibilidad.com/) proporciona la última información sobre MySQL y MySQL AB. SQL es el lenguaje estandarizado más común para acceder a bases de datos y está definido por el estándar ANSI/ISO SQL. http://www. Si se desea estudiar el código fuente y cambiarlo para adaptarlo a necesidades particulares. El estándar SQL ha evolucionado desde 1986 y existen varias versiones. necesita un sistema de gestión de base de datos como MySQL Server. El software MySQL usa la licencia GPL (GNU General Public License). y procesar los datos almacenados en una base de datos. Página 17 de 82 . desde una simple lista de compra a una galería de pintura o las más vastas cantidades de información en una red corporativa. Cualquiera puede bajar el software MySQL desde Internet y usarlo sin pagar nada. los sistemas de gestión de bases de datos juegan un papel central en computación. La parte SQL de "MySQL" se refiere a "Structured Query Language". • MySQL software es Open Source. • MySQL es un sistema de gestión de bases de datos relacionales Una base de datos relacional almacena datos en tablas separadas en lugar de poner todos los datos en un gran almacén. como aplicaciones autónomas o como parte de otras aplicaciones.org/licenses/.fsf. Para añadir.mysql.

aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible. un lenguaje interpretado. velocidad. El servidor MySQL también tiene una serie de características prácticas desarrolladas en cooperación con los usuarios. es decir muchas aplicaciones soportan el servidor de base de datos de MySQL. MySQL Server se desarrolló originalmente para tratar grandes bases de datos mucho más rápido que soluciones existentes y ha sido usado con éxito en entornos de producción de alto rendimiento durante varios años. programas y bibliotecas cliente. • Una gran cantidad de software de contribuciones está disponible para MySQL. En el tiempo de ejecución. 1. comparte un nombre similar y una sintaxis similar.5 Java Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems a principios de los años 1990. y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet • MySQL Server trabaja en entornos cliente/servidor o incrustados El software de bases de datos MySQL es un sistema cliente/servidor que consiste en un servidor SQL multi-threaded que trabaja con diferentes back ends. pero no está directamente relacionado con Java. MySQL Server ofrece hoy en día una gran cantidad de funciones. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++. herramientas administrativas y un amplio abanico de interfaces de programación para aplicaciones (APIs). aunque la compilación en código máquina nativo también es posible. Su conectividad.Maestría en Informática Aplicada en Redes • El servidor de base de datos MySQL es muy rápido. el bytecode es normalmente interpretado o compilado a código nativo para la ejecución. pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel como punteros. fiable y fácil de usar. Las aplicaciones Java están típicamente compiladas en un bytecode. Página 18 de 82 . JavaScript.

2. Para conseguir la ejecución de código remoto y el soporte de red. los programadores de Java a veces recurren a extensiones como CORBA (Common Object Request Broker Architecture). Así. Debería incluir por defecto soporte para trabajo en red. 5. Un objeto puede verse como un paquete que contiene el “comportamiento” (el código) y el “estado” (datos). 4. Las características principales de Java son las siguientes: • Orientado a Objetos La primera característica. Frecuentemente. Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos. 3. El principio es separar aquello que cambia de las cosas que permanecen inalterables. los datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. orientado a objetos (“OO”). Debería usar la metodología de la programación orientada a objetos. conforme a las especificaciones del Java Community Process. una primera idea es diseñar el software de forma que los distintos tipos de datos que use estén unidos a sus operaciones. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos.Maestría en Informática Aplicada en Redes Sun Microsystems proporciona una implementación GNU General Public License de un compilador Java y una máquina virtual Java. Aunque hay muchas interpretaciones para OO. Internet Communications Engine o OSGi respectivamente. aunque la biblioteca de clases que se requiere para ejecutar los programas Java no es software libre. como C++. Debería diseñarse para ejecutar código en sistemas remotos de forma segura. cambiar una estructura de datos implica un cambio en el Página 19 de 82 . El lenguaje Java se creó con cinco objetivos principales: 1. se refiere a un método de programación y al diseño del lenguaje.

y su “comportamiento” (soldar dos piezas.). etc. Esta separación en objetos coherentes e independientes ofrece una base más estable para el diseño de un sistema software. o viceversa. etc. debería en teoría tener el mismo conjunto de comportamiento en diferentes proyectos. Una vez definidos datos (peso. etc. mejorando como consecuencia su calidad y reduciendo el número de proyectos fallidos. el objeto “aluminio” puede ser reutilizado en el campo de la construcción. maleabilidad. los objetos podrían verse como piezas reutilizables que pueden emplearse en múltiples proyectos distintos. una de las premisas fundamentales de la Ingeniería del Software. • Independencia de la plataforma La segunda característica. Otra de las grandes promesas de la programación orientada a objetos es la creación de entidades más genéricas (objetos) que permitan la reutilización del software entre proyectos.Maestría en Informática Aplicada en Redes código que opera sobre los mismos. por ejemplo. conduciendo esto finalmente a una reducción drástica del tiempo de desarrollo. En este sentido. La reutilización del software ha experimentado resultados dispares.). la independencia de la plataforma. Algunas comunidades de “código abierto” (open source) quieren ayudar en este problema dando medios a los desarrolladores para diseminar la información sobre el uso y versatilidad de objetos reutilizables y librerías de objetos. encontrando dos dificultades principales: el diseño de objetos realmente genéricos es pobremente comprendido. Es lo que significa ser capaz de escribir un Página 20 de 82 . posibilitando así a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad. algo que suele suceder en las grandes organizaciones. y falta una metodología para la amplia comunicación de oportunidades de reutilización. Podemos usar como ejemplo de objeto el aluminio. significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. El objetivo es hacer que grandes proyectos sean fáciles de gestionar y manejar. de la aviación. Un objeto genérico “cliente”. del automóvil. sobre todo cuando estos coinciden en cierta medida.

aunque hay una etapa explícita de compilación. Esto elimina la etapa intermedia donde se genera el bytecode. Las primeras implementaciones del lenguaje usaban una máquina virtual interpretada para conseguir la portabilidad. Aunque es de hecho posible escribir programas para la Página 21 de 82 . run everywhere’’’. tal como reza el lema de Java. Esta pieza está “a medio camino” entre el código fuente y el código máquina que entiende el dispositivo destino. Hay implementaciones del compilador de Java que convierten el código fuente directamente en código objeto nativo.Maestría en Informática Aplicada en Redes programa una vez y que pueda ejecutarse en cualquier dispositivo. Para ello. El bytecode es ejecutado entonces en la máquina virtual (VM). ejecución mediante hebras o threads. un programa escrito en código nativo de la plataforma destino (que es el que entiende su hardware). el resultado eran programas que se ejecutaban comparativamente más lentos que aquellos escritos en C o C++. como GCJ. para generar un código conocido como “bytecode” (específicamente Java bytecode) instrucciones de máquina simplificadas específicas de la plataforma Java. Se debe tener presente que. pero la salida de este tipo de compiladores sólo puede ejecutarse en un tipo de arquitectura. Además. la interfaz de red) de forma unificada. el bytecode generado es interpretado o convertido a instrucciones máquina del código nativo por el compilador JIT (Just In Time). empleando diversas técnicas. Esto hizo que Java se ganase una reputación de lento en rendimiento. Las implementaciones recientes de la JVM dan lugar a programas que se ejecutan considerablemente más rápido que las versiones antiguas. se compila el código fuente escrito en lenguaje Java. Sin embargo. ‘’’write once. La portabilidad es técnicamente difícil de lograr. se suministran librerías adicionales para acceder a las características de cada dispositivo (como los gráficos. que interpreta y ejecuta el código. y el éxito de Java en ese campo ha sido dispar.

Eclipse fue desarrollado originalmente por IBM como el sucesor de su familia de herramientas para VisualAge. los Java Beans y otros. cubriendo casi todas las áreas de Model Driven Engineering. opuesto a las aplicaciones "Cliente-liviano" basadas en navegadores. 1. típicamente ha sido usada para desarrollar entornos integrados de desarrollo (del Inglés IDE). Eclipse es también una comunidad de usuarios. capacidades y servicios. como BitTorrent Azureus. extendiendo constantemente las áreas de aplicación cubiertas. Sin embargo.6 Eclipse Eclipse es una plataforma de software de Código abierto independiente de una plataforma para desarrollar lo que el proyecto llama "Aplicaciones de Cliente Enriquecido". Eclipse es ahora desarrollado por la Fundación Eclipse. sin embargo. los Servlets. Los siguientes componentes constituyen la plataforma de cliente enriquecido: Página 22 de 82 . • Arquitectura La base para Eclipse es la Plataforma de cliente enriquecido (del Inglés Rich Client Platform RCP).Maestría en Informática Aplicada en Redes plataforma Java que actúen de forma correcta en múltiples plataformas de distinta arquitectura. El concepto de independencia de la plataforma de Java cuenta. también se puede usar para otros tipos de aplicaciones cliente. como los Servicios Web. con un gran éxito en las aplicaciones en el entorno del servidor. una organización independiente sin ánimo de lucro que fomenta una comunidad de código abierto y un conjunto de productos complementarios. Esta plataforma. Un ejemplo es el recientemente creado Eclipse Modeling Project. como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se embarca como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse).

permite a Eclipse trabajar con lenguajes para procesado de texto como LaTeX. manejo de texto. la cual simplifica la construcción de aplicaciones basada en SWT. editores de texto El Workbench de Eclipse . que usan las opciones estándar Abstract Window Toolkit (AWT) o Swing. perspectivas. La definición que da el proyecto Eclipse acerca de su software es: "una especie de herramienta universal . aplicaciones web. aplicaciones en red como Telnet y Sistema de gestión de base de datos. Adicionalmente a permitirle a Eclipse extenderse usando otros lenguajes de programación como son C/C++ y Phyton. las necesite el usuario o no. como seria Gestión de la configuración. asistentes Los widgets de Eclipse están implementados por un herramienta de widget para Java llamada SWT.una plataforma para bundling estándar. El entorno integrado de desarrollo (IDE) de Eclipse emplea módulos (en inglés plugin) para proporcionar toda su funcionalidad al frente de la plataforma de cliente rico.vistas. En cuanto a las aplicaciones clientes.manejo de archivos. La arquitectura plugin permite escribir cualquier extensión deseada en el ambiente.un IDE abierto y extensible para todo y nada en particular".Maestría en Informática Aplicada en Redes • • • • • Plataforma principal . Este mecanismo de módulos es una plataforma ligera para componentes de software. etc. Por ejemplo. El Standard Widget Toolkit (SWT) .inicio de Eclipse. a diferencia de otros entornos monolíticos donde las funcionalidades están todas incluidas. JFace . editores. ejecución de plugins OSGi . La interfaz de usuario de Eclipse también tiene una capa GUI intermedia llamada JFace. definición y manipulación de modelos de software. eclipse provee al programador con frameworks muy ricos para el desarrollo de aplicaciones gráficas. Y no tiene porque ser usado únicamente para soportar otros lenguajes de programación. a diferencia de la mayoría de las aplicaciones Java. GEF (Graphic Editing Página 23 de 82 .Un widget toolkit portable. Se provee soporte para Java y CVS en el SDK de Eclipse.

interfaces gráficas para el usuario (GUI). además de poder ser usados conjuntamente con otros plugins. permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. ofreciendo un IDE con un compilador de Java interno y un modelo completo de los archivos fuente de Java. aplicaciones web. etc. hacen uso de su interfaz gráfica que puede ser personalizada y profesional. definición y manipulación de modelos de software. en este caso un grupo de metadata en un espacio para archivos plano. GEF (Graphic Editing Framework . interfaces gráficas para el usuario (GUI). hacen uso de su interfaz gráfica personalizable y profesional.Framework para la edición gráfica) es un plugin de eclipse para el desarrollo de editores visuales que pueden ir desde procesadores de texto wysiwyg hasta editores de diagramas UML. Por ejemplo. además de poder ser usados conjuntamente con otros plugins. Dado que los editores realizados con GEF "viven" dentro de eclipse. eclipse provee al programador con frameworks muy ricos para el desarrollo de aplicaciones gráficas.Framework para la edición gráfica) es un plugin de eclipse para el desarrollo de editores visuales que pueden ir desde procesadores de texto wysiwyg hasta editores de diagramas UML.Maestría en Informática Aplicada en Redes Framework . Dado que los editores realizados con GEF "viven" dentro de eclipse. Esto permite técnicas avanzadas de refactorización y análisis de código. El IDE también hace uso de un espacio de trabajo. ofreciendo un IDE con un compilador de Java interno y un modelo completo de los archivos fuente de Java. en este caso un grupo Página 24 de 82 . • El SDK de Eclipse incluye las herramientas de desarrollo de Java. Características: La versión actual de Eclipse dispone de las siguientes características: • • Editor de texto Resaltado de sintaxis En cuanto a las aplicaciones clientes. etc. etc. El SDK de Eclipse incluye las herramientas de desarrollo de Java. Esto permite técnicas avanzadas de refactorización y análisis de código. El IDE también hace uso de un espacio de trabajo.

permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. vía Hibernate Tools. Integración con Hibernate. • Plataforma de herramientas para pruebas y desempeño (de sus siglas en Inglés TPTP) que provee una plataforma que permite a desarrolladores de software construir herramientas de pruebas y desempeño. vía Subclipse. clases. Refactorización Asimismo. Plataforma Eclipse de Cliente Enriquecido (RCP) y las herramientas de desarrollo de Java (JDT). • El proyecto Eclipse per se que incluye la Plataforma Eclipse. Proyectos Eclipse Eclipse esta compuesto de muchos proyectos diferentes.Maestría en Informática Aplicada en Redes de metadata en un espacio para archivos plano. como son Depuradores. etc. Página 25 de 82 . • • • • • • Compilación en tiempo real Pruebas unitarias con JUnit Control de versiones con CVS Integración con Ant Asistentes (wizards): para creación de proyectos. Algunos proyectos se mencionan a continuación. profilers y aplicaciones Benchmark. tests. a través de "plugins" libremente disponibles es posible añadir: • • Control de versiones con Subversion.

JSP. proyectos de naturaleza Java EE. herramientas para acceso a base de datos. DTD. desde una especificación de modelo descrita en XMI.0 metamodel para la plataforma Eclipse diseñada para soportar el desarrollo de herramientas de modelado. Editores gráficos para XSD y WSDL. un sistema de reporteo Código abierto basado en Eclipse para aplicaciones Web. especialmente aquellas basadas en Java EE. JavaScript. filtrado y modelos. SQL. CSS. XSD y WSDL. • Plataforma de comunicaciones de Eclipse Communication Framework (ECF) habilita la creación de aplicaciones de comunicaciones en la plataforma de Eclipse. un explorador y asistente para servicios Web y una herramienta de pruebas WS-I. • Proyecto de Edición Visual (VE) una plataforma para crear constructores GUI para Eclipse • Plataforma de Modelado Eclipse (EMF) una plataforma de modelado y generación de código para construir herramientas y otras aplicaciones basadas en un modelo de datos estructurado. y herramientas para manejo de servidores de pruebas unitarias. • UML2 una implementación de UML 2. XML. constructores y modelos y un navegador de Java EE. Esta compuesta de: Editores de fuentes para HTML. • Herramientas de Modelado Generativo (GMT) un grupo de herramientas para modelado por ejemplo para ejecutar transformaciones de modelo QVT. Página 26 de 82 .Maestría en Informática Aplicada en Redes • Proyecto Plataforma de Herramientas Web (WTP) extiende la plataforma Eclipse con herramientas para desarrollar aplicaciones Web en Java EE. • Proyecto de herramientas para inteligencia empresarial y generación de reportes (BIRT). • Plataforma de Editor Gráfico (GEF) permite a los desarrolladores tomar el modelo de una aplicación existente y fácilmente crear un editor de gráficos ricos.

Básicamente habilita el mismo modelo de aplicaciones usado en maquinas de escritorio para ser usados en dispositivos. • Plataforma de Cliente Rico incluido (eRCP) la intención es extender la plataforma de Cliente Rico (de las siglas en Inglés RCP) para dispositivos incluidos. eRCP es en general un grupo de componentes que son subgrupos de los componentes RCP. • Herramientas de Desarrollo de Java (JDT) provee las herramientas que implementan un IDE de Java. • Subproyecto IDE de COBOL para Eclipse (COBOL) construye un Ambiente Integrado de Desarrollo (IDE) completamente funcional para COBOL en la plataforma Eclipse. soportando el desarrollo de cualquier aplicación Java. Proyecto de herramientas de desarrollo en C/C++ (CDT) trabaja para proveer un Ambiente integrado de desarrollo completamente funcional para C y C++ para la plataforma Eclipse.Maestría en Informática Aplicada en Redes • • Proyecto Plataforma de herramientas de Datos (DTP) Plataforma de Herramientas Paralelas (PTP) entrega una plataforma de herramientas paralelas portables. Proyectos IDE en Lenguajes • • AspectJ es una extensión del lenguaje Java orientado a aspectos. incluyendo los plug-ins de Eclipse. Página 27 de 82 . • Plataforma de Desarrollo de Software para Dispositivos (DSDP) es un proyecto de desarrollo de software colaborativo de código abierto dedicado a proveer una plataforma extendible basada en estándares para cubrir un amplio rango de necesidades en el área del desarrollo de software para dispositivos usando la plataforma de Eclipse. basadas en estándares que habilita la integración de herramientas específicamente desarrolladas para computadoras con arquitectura paralela. escalables.

• Proyecto IDE PHP trabaja para proveer un IDE completamente funcional para PHP para la plataforma Eclipse. JOnAS y JRun. Lomboz admite la mayoría de los runtimes de servidores de aplicaciones J2EE estándar. editor JSP y asistente para el código. 5. 1. Lomboz suministra: 1. y admite la mayoría de los runtimes populares de código abierto tales como JOnAS. Lomboz está hospedado y desarrollado por el consorcio ObjectWeb (el grupo de desarrollo se llama a sí mismo "eteration"). Al igual que JOnAS. Esto está distribuido bajo LGPL. • Wolfram Workbench es un IDE basado en Eclipse (también disponible como plugin para Eclipse) para el lenguaje Mathematica. Asistentes para crear y ensamblar módulos J2EE. Compatibilidad con JBoss. 3. • PyDev un IDE completamente funcional para python con soporte para Refactorización. generadores de código EJB basados en XDoclet. Generadores de Servicios Web basados en Apache Axis.7 Lomboz Lomboz es un plugin gratuito y abierto para el entorno de desarrollo J2EE. 2. Apache Tomcat. y depurador gráfico.Maestría en Informática Aplicada en Redes • Photran (photran) es un IDE completamente funcional para Fortran con soporte para Refactorización. Hibernate facilita a los desarrolladores crear las clases de persistencia utilizando Página 28 de 82 . Java. probar. J2EE y EJB. 1. 4.8 Hibernate Hibernate es un servicio de persistencia objeto/relaciones y consultas para Java. Tiene medios para desarrollar. perfilar y desplegar aplicaciones web. WebLogic.

xml) para la configuración.sourceforge.incluyendo la asociación.User" table="users"> <id name="ID" column="LogonId" type="string"> <generator class="assigned"/> </id> <property name="userName" column="Name" type="string"/> <property name="password" type="string"/> Página 29 de 82 .save(miObjeto) o borrarlo con session. por ejemplo. que necesita que modifiquemos los archivos de las clases.hbm. Usar JDBC es complejo y muy dependiente de la estructura de los datos. Vamos a tener un archivo properties (hibernate.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate. que es el componente software encargado de traducir entre objetos y registros. que nos permitirá hacer cosas como poder guardar un objeto en la base de datos simplemente con session. pero es imposible con las BBDD relacionales. Sería más natural y mucho más sencillo trabajar directamente con objetos. Usa el mecanismo de reflexión de Java. La mejor opción entonces es utilizar un motor de persistencia.cfg. en contra de.xml) que indica el mapping entre objetos y relaciones.dtd"> <hibernate-mapping> <class name="dbdemo. y las BBDD orientadas a objeto están todavía muy poco desarrolladas.delete(miObjeto). Un motor de persistencia de código abierto es Hibernate.properties) o un archivo xml (hibernate. una serie de JavaBeans que son las clases a persistir y en las que cada campo se asociará con una columna de la BBDD. JDO. herencia. Ejemplo de archivo de mapeo: <?xml version="1.Maestría en Informática Aplicada en Redes el lenguaje Java .net/hibernate-mapping. y un archivo xml por cada una de estas clases (NombreClase. polimorfismo y composición y el entorno de colecciones Java. que permite a un objeto en ejecución examinarse y manipularse a sí mismo.

El atributo type es opcional (Hibernate utilizará reflection para conjeturar el tipo para el caso en que no se le indique) 1. protocolos. bases de datos. otros lenguajes de programación (Java. lo que convierte a PERL en el lenguaje ideal para desarrollo de prototipos y aplicaciones robustas 100% portables. pero se le debe indicar como). PERL es útil en la resolución de cualquier tarea y posee habilidades para integrarse con sistemas operativos. Su versatilidad y eficiencia en el manejo de texto Página 30 de 82 . C. del tipo que se desee. PERL es el estándar "no oficial" para la construcción de compuertas CGI (Common Gateway Interface) que generan páginas dinámicas en la Web.Maestría en Informática Aplicada en Redes <property name="emailAddress" type="string"/> <property name="lastLogon" type="date"/> </class> </hibernate-mapping> La etiqueta class del código anterior indica el nombre de la clase que vamos a mapear a la tablar de users en la base de datos. redes. es posible reducir extensos programas escritos en C a pocas líneas de código de un programa PERL. La etiqueta del generador le dice a hibernate como debe producir la clave primaria (Hibernate genera una. etc. en este caso se a fijado como “asignado”. Durante los últimos años la popularidad del lenguaje alcanzó niveles insospechados a raíz de su utilización generalizada en soluciones Web. con la ventaja adicional de que corren sin cambio sobre casi cualquier plataforma existente. Si se quiere que hibernate asigne las claves se pueden utilizar las claves uuid.string. PERL combina en forma concisa las mejores características de lenguajes como C. ).hex y uuid. Las etiquetas property le indican a hibernate los atributos del objeto (name) y su campo correspondiente en la tabla dentro de la base de datos. La etiquete Id tiene que ver con el mapeo de la clave primaria de la tabla. etc.9 PERL Practical Extraction and Report Language es un sofisticado lenguaje de programación diseñado a finales de los años 80 por el lingüista norteamericano Larry Wall. En general. awk y sh. Junto con las facilidades para el desarrollo de aplicaciones Web. sed. ambientes gráficos.

de "expresiones regulares" no tiene equivalente en ningún otro lenguaje de programación actual. Finalmente. es importante mencionar que PERL también es un lenguaje orientado a objetos aunque el programador no está forzado a programar con este esquema. Página 31 de 82 .Maestría en Informática Aplicada en Redes y. específicamente.

• Soporte de servidor 7/24 Los costos de operación de los servidores por lo general son altos. 2. Análisis del problema En este apartado del proyecto.Maestría en Informática Aplicada en Redes II. • Múltiples Administradores de servidores Página 32 de 82 . en términos económicos para la empresa. Los principales problemas en la actualidad se enuncian a continuación: • Atención de servidor por fallos en servicios Generalmente la administración de servidores se lleva a cabo “in situ”. Cuando dichos servicios tienen cobertura 7/24 estos se elevan aun más. por lo que hay uno o varios administradores responsables del buen funcionamiento de dichos servidores. Una vez planteado. se analizan las características del problema y finalmente se establecen las características de la solución.1 Situación actual Existe una gama de situaciones delicadas en torno a la administración remota de servidores. debiendo optar por contratar personal de administración de servidor para las 24 horas o hacer que el personal pueda desplazarse al lugar donde se encuentren dicho servidor para solucionar cualquier fallo. se plantea el problema usando la técnica de la caja negra. de tal forma que si un servicio tiene algún problema. El soporte se vuelve un problema para el especialista responsable de los servidores. se analiza la situación actual. ya que las fallas pueden darse a cualquier hora del día y cualquier día del año. el responsable deberá solucionarlo presencialmente. con el propósito de que estos se mantengan operando de forma constante.

Maestría en Informática Aplicada en Redes Se da el caso en el que se tienen servidores distribuidos en más de un lugar. Regularmente los servidores de producción no se pondrían Página 33 de 82 . y lo segundo porque sus servidores de producción estarían expuestos públicamente al Internet. y este tipo de contratación no es factible para muchas empresas. Lo anterior nos lleva a decir que no se logra una comunicación interactiva con el servidor de manera remota. uno más para administrador de dominio. baja productividad e inclusive problemas con clientes que a la larga. redundan en la paralización de su actividad empresarial. poder tomar control remoto desde otra computadora distante. por tener seguramente contrato de servicios redundantes de Internet. Por ejemplo un administrador para la base de datos. otro para el correo electrónico. pero dichas aplicaciones se quedan simplemente en el diagnostico de la falla. teniendo que contratarse un administrador por cada servidor. • Sistemas de control remoto por acceso desde PC e Internet Existen formas de tomar control remoto de servidores. con aplicaciones tales como X. Este recurso permite a empresas que tienen sus servidores con una IP pública. el administrador podría saber cual es el problema. Esta solución requiere tener una inversión fuerte en lo relativo a lo económico y a la seguridad. como cuando se poseen sucursales. • Sistemas de monitoreo sin control remoto Existen algunas aplicaciones Web desde las cuales se pueden realizar monitoreo de servicios. ya que esto les podría causar retraso. lo primero. otro para administración de servidores Web y así conforme los servicios que se brinden. • Baja rentabilidad por fallas de servidores Es vital para las empresas que sus operaciones no sean suspendidas por fallas en los servicios prestados por sus servidores. Por ejemplo si un servidor MySql falla. pero no podrá levantar remotamente dicho servicio y comprobar posteriormente su estado.

Maestría en Informática Aplicada en Redes bajo este riesgo. • Sistemas de control remoto por medio de SMS No existe al momento una forma de lograr la administración remota de servidores por medio de mensajes de texto desde un celular y que además sea configurable. poder ir extendiendo los servicios a los cuales se les pueda dar soporte. lo cual no es como un teléfono celular el cual anda en su bolsillo. es decir. generalmente se requiere una mayor inversión en infraestructura de comunicaciones para la incorporación de los servidores en una DMZ o hacer posible un acceso configurado a través de VPN. a través del método de la caja negra. se analizan preliminarmente en el siguiente cuadro: Página 34 de 82 . 2. Una gran desventaja de este modelo a parte de lo económico y la seguridad es que el control debe realizarse desde una PC.2 Planteamiento del problema A continuación se presenta el planteamiento del problema. Servidor sin control remoto Sistema WDS Servidor controlado remotamente Los elementos involucrados en la caja negra anterior.

Maestría en Informática Aplicada en Redes Entrada • • • Fallos en servicios de Proceso Salida • Servicios controlados en servidores remotos Sin Soporte 7/24 Se cuenta con Múltiples Adimistradores físicos • • Soluciones no rentables Control remoto desde PC WDS • • servidores remotos Con Soporte 7/24 Se pueden controlar uno o más Servidores y diversos servicios • • Solución de bajo costo Control remoto móvil desde celular por medio de SMS 2.3 Características del problema: A continuación se listan las principales características del problema: 2. Característica de Soporte 7/24 No se tiene la factibilidad de contratar un especialista en servidor para cobertura 7/24 Página 35 de 82 .3.3.2 Características de fallo en servicios en servidores Fallo imprevisto en horas no laborales Todo servidor tiene riesgo en fallo en sus servicios Si el fallo es detectado. La interrupción del servicio persiste hasta que el administrador está presencialmente El servidor no tiene un sistema de monitoreo El servidor está monitoreado pero no tiene forma de comunicarse con el exterior El administrador es advertido del fallo del servicio pero no tiene acceso a al servidor El Administrador no puede tener forma de aplicar comandos al servidor. el servicio permanece interrumpido.1 2.

El administrador tiene celular.4 2.6 - No se cuenta en la mayoría de empresas Muchas compañías con servicios críticos como hospitales. Características en torno a la rentabilidad No es rentable la contratación de un ISP No es factible contratar especialistas para estar de turno 7/24 No se tiene acceso a red de telefonía fija y por lo tanto una red de microondas u otro medio.Maestría en Informática Aplicada en Redes 2. no es rentable. policía. El proceso detenido en el Server. lo cual Página 36 de 82 . Características del problema con múltiples administradores Se tienen varios servidores Se tiene un administrador para cada servidor Pueden haber varios administradores para diversos servicios en un solo servidor. Control remoto móvil El administrador tiene PC sin el programa de acceso El administrador está viajando de una ubicación geográfica a otra y no tiene acceso a PC. detiene muchos recursos a su vez (efecto cascada). el Server deberá ser asegurado. mal imagen y esto se traduce en menores ingresos. La interrupción de servicios ocasiona baja productividad.3. En muchos casos la ubicación geográfica del servidor se encuentra en zonas de difícil acceso o de alta peligrosidad. respaldado y se deberán tomar todas las medidas para mitigar riesgos.3. pero no puede controlar la PC desde ese dispositivo Seguridad El Server de producción no se puede exponer al Internet Una vez en Internet. Pueden haber diversos administradores.3 2.5 2.3. es crítico para el cliente del proceso. fábricas operan las 24 horas El administrador de turno no se encuentra disponible El proceso que se ha detenido.3.

Deberá vencer el problema de depender de una PC para operar un servidor. Deberá permitir controlar diversos servicios e inclusive diversas máquinas (PC o Servidores).4 Características de la solución. se prefiere que el control se haga desde un dispositivo móvil. es decir debe ser capaz de acceder al servidor en cualquier día y hora. control y otras que deberán presupuestarse. No hay una forma sencilla y segura para tomarlo desde cualquier ubicación e interactuar con el. Página 37 de 82 . No deberá hacer depender a una empresa de contratar un ISP de Internet. Deberá vencer las barreras de Seguridad. 2. ejecutando remotamente grupos de comandos o instrucciones individuales de sistema operativo que permitan realizar funciones de administración de servidor tales como la recuperación de servicios y la consulta del estado de los mismos. Deberá ser una solución de bajo presupuesto y de preferencia usando software libre. Deberá permitir soporte 7/24. deberá ser capaz de resolver todas las características mencionadas anteriormente • • • • • • • Deberá ser una solución que permita interactuar con el servidor en ambas vías.Maestría en Informática Aplicada en Redes implica tareas de monitoreo. es decir lanzarle comandos y recibir respuestas del servidor. La solución que se busca.

Ordenes o comandos Página 38 de 82 . así como también la justificación del tipo de elección. Diagrama de nivel 1: Diagrama en el que la propuesta de solución es aproximada como una solución siempre de alto nivel. pero en la cual se puedan ver sus componentes internos.1 Diagrama de contexto (Nivel 0) Desde la perspectiva del usuario final (administrador(es) del servidor). 3. Propuesta de solución En este capítulo se presenta la solución propuesta. La propuesta de solución se aproximará en tres escalones: • • Diagrama de contexto o de nivel 0: Diagrama jerárquico de la solución al más alto nivel posible.Maestría en Informática Aplicada en Redes III. el proyecto consiste en diseñar un sistema de ingeniería para acercar el equipo servidor a sus administradores en cualquier lugar a cualquier hora del día utilizando mensajes de textos desde su teléfono móvil para administrar los servicios prestados por equipos servidores en una ubicación distante. • Diagrama de nivel 2: Diagrama completo con todos los componentes de la solución propuesta.

El caso de uso puede verse en la siguiente figura. podrá realizar las siguientes actividades: • • Realizar el monitoreo de algún servicio. Enviar comandos al equipo servidor. WDS Envia /Recibe SMS «uses» «uses» «uses» Ejecutar comando Admin Fisico Admin Virtual A continuación se muestra el correspondiente diagrama de secuencia Página 39 de 82 . El procedimiento es bastante simple y consiste de los siguientes pasos: • • • Administrador.Maestría en Informática Aplicada en Redes El administrador podrá ejecutar comandos en el Servidor desde su celular y recibir la salida del comando. envía un mensaje al servidor Servidor recibe el mensaje y ejecuta el comando asociado Servidor capta la salida del comando en el sistema operativo y se la devuelve al Administrador. vía mensaje de texto. lo cual simula un control remoto del servidor. El administrador y el sistema WDS.

puerto infrarrojo u otros medios. bluetooth. Para esto será necesario tener otro celular. a través de un demonio denominado smsd. estará conectado al Server. por USB.Maestría en Informática Aplicada en Redes Admin Viirtual WDS Sistema Operativo Administrador Físico Envía SMS SMS Comando Salida del comando Envia Resultado Envía SMS 3. El mensaje será trasladado a una base de mySql. quien reciba el mensaje. Dicho demonio es parte del proyecto Gammu. Ordenes o comandos El celular que recibe el mensaje.2 Diagrama de nivel 1 El mensaje es recibido en el servidor. Página 40 de 82 .

Página 41 de 82 . que es parte del núcleo del presente proyecto WDS. se presente un esquema completo de la solución y seguidamente se realiza el diagrama de secuencia. con todos los detalles. Esto será la tarea que realizará un demonio del presente proyecto WDS. WDS Lee mensaje Entrega de SMS Mensaje SMSD Daemon SMSD I2ic Daemon Envía SMS Gammu Admin Fisco MySQL JAVA Comando a Ejecutar Sistema Operativo 3. capturando la salida del mismo y la enviará de regreso al celular que inició toda esta cadena de pasos. el mensaje deberá ser transformado a comando. un programa en java. En primera instancia.3 Diagrama de nivel 2 En este diagrama se visualiza la solución completa. hará la ejecución del comando a nivel del sistema operativo. el cual recibe su nombre precisamente de “Inbox to Inbox Command” Una vez el comando se ha identificado. llamado i2ic. a fin de visualizar la interacción de todos los componentes.Maestría en Informática Aplicada en Redes En la base de datos.

Maestría en Informática Aplicada en Redes WDS Entrega de SMS Lee mensaje SMSD Daemon Gammu SMS Codificado Envía SMS Admin Fisco MYSQL Inbox Inbox Command Outbox Command Hibernate i2ic Daemon JAVA Sistema Operativo El proceso empieza enviando el mensaje desde un celular válido. Luego otro demonio llamado i2ic revisa que el mensaje sea con el formato :1 y va a la base de datos a buscar el comando correspondiente. debidamente identificado con su script asociado. El comando encontrado está compuesto de dos elementos: archivo y ruta. es conocido ahora como InboxCommand. Dicho mensaje es recibido en el celular que controla al servidor. El mensaje. Una vez el InboxCommand recibe un comando. toma el objeto InboxCommand. la aplicación Java. El Mensaje es tomado por el demonio smsd el cual lo almacenara dentro de la estructura de base de datos. por medio del motor de Página 42 de 82 . Archivo es el nombre del archivo que puede contener uno o más comandos (Script) y ruta es la ubicación del dicho archivo en el sistema de archivos.

4. que permite la recepción y envío de mensajes SMS utilizando una base de datos mySql. Originalmente se había seleccionado el proyecto GNOKI el cual permite el control del envío y recepción de mensajes. Este proyecto de código abierto en lenguaje C ANSI.1 Gammu. por medio del celular conectado al servidor. tendrá que realizar todos los mecanismos para elevar el mensaje a la categoría de comando. Este es gratuito y es podría decirse que es el punto de partida del presente proyecto WDS.4 Software a utilizar: 3. se puede apreciar a través del diagrama de secuencia de la siguiente figura Celular1 Celular2 Enviar Sms Smsd Daemon Inbox Table I2ic Daemon Command Table JavaClient Os Outbox Table Leer Sms Insert Sms Leer Sms Marcar Leído getId getScriptName Return Script Mensaje1 Exe Command getOutput Prepare Outbox Insert Outbox Leer Sms Escribir Sms Send Sms 3. sin embargo la parte de la base de datos no la incluye. en forma de SMS. el cual va hacia el cliente. La secuencia en la que el diagrama anterior realiza la interacción con todos los componentes. El presente proyecto WDS. ejecutarlo en el sistema Página 43 de 82 .Maestría en Informática Aplicada en Redes persistencia llamado HIBERNATE. interpretar el comando. ejecuta el comando y finalmente convirtiéndolo en un objeto de salida (Outbox).

es posible reducir extensos programas escritos en C a pocas líneas de código de un programa PERL.4 Perl. 3. así como evitar conexiones con JDBC.4. portable.3 Java. En general.4.Maestría en Informática Aplicada en Redes operativo y finalmente capturar la salida del comando y enviarla de nuevo como SMS al celular solicitante. 3.2 Hibernate. Hibernate se encarga del mapeo de clases a sus correspondientes tablas de base de datos. Este lenguaje combina en forma concisa las mejores características de lenguajes como C. sed. Es la más flexible y poderosa solución en el mercado de motores de persistencia. seguro. Es un motor de persistencia. 3. Página 44 de 82 . El lenguaje fue diseñado con las siguientes características en mente: Simple.4. El programa de Java puede ejecutarse en cualquier máquina o plataforma. familiar. El propósito de usar Hibernate en este proyecto es reducir el tiempo de desarrollo y evitar el uso de SQL dentro del código. es decir un servicio de alto rendimiento objeto/relacional. etc. awk y sh. con la ventaja adicional de que corren sin cambio sobre casi cualquier plataforma existente. de manera de programar ciento por ciento orientado a objetos. robusto. lo que convierte a PERL en el lenguaje ideal para desarrollo de prototipos y aplicaciones robustas 100% portables.

jar y mysql-conector-java-3.Maestría en Informática Aplicada en Redes IV.maestria.xml.xml) entre las clases de la capa de dominio y sus tablas de datos.1 Estructura de Carpetas y archivos del sistema WDS La estructura de carpetas y archivos del proyecto WDS es mostrado en la figura 4.wds. 9.1. En la carpeta bin se muestran los archivos ejecutables clientStart. Son las clases: • • sv. Esto se realiza con soporte para el sistema operativo Linux en sus distribuciones RedHat y SUSE v. también se encuentra el archivo hibernate.8-bin.sh y i2ic. En la carpeta installers.ufg. también se encuentran las clases que implementan la capa de dominio.Administrador las encargadas de ejecutar la lógica de un administrador virtual para ejecutar el comando solicitado y obtener una salida desde esta ejecución. enviando un mensaje Página 45 de 82 . datos y negocio del sistema WDS. asi mismo pueden verse las otras librerias.08.2 4.ufg.hbm.xml en el que se definen los parámetros de conexión y configuración para que hibernate pueda conectarse a la base de datos.hbm.edu. se muestra el instalador de proyecto GAMMU version 1. así como también el procedimiento para instalar y configurar el prototipo del sistema WDS trabajando como un administrador virtual de un equipo servidor. Outbox.jar.pl. dentro de una red local. las cuales son requeridas para el correcto funcionamiento de la librería de hibernate.wds. La carpeta classes contiene los archivos de correspondencia (InboxCommand. En la carpeta lib pueden apreciarse las librerias del motor de persistencia hibernate y las de la base de datos mysql en los archivos hibernate3.edu.negocio.maestria.negocio. Metodología En este capitulo se revisan los procedimientos a seguir para la instalación y configuración del paquete WDS y GAMMU.cfg. Las carpetas del sistema se encuentran dentro de la carpeta WDS.15 sobre el cual se monta el proyecto WDS.Cliente sv.1. los cuales corresponden a los aplicativos para atender las solicitudes de comandos entrantes y el aplicativo que trabaja como un daemon. que es el que traslada los mensajes entrantes a solicitudes de comandos respectivamente.

estos son scripts auto ejecutables. En la carpeta log se crean archivos nombrados como log_<commandID>.sh setup.0) se describen en la tabla 4.txt en los cuales se van almacenando información de salida obtenida desde cada comando de usuario ejecutado.1. Tabla 4. debe utilizarse el script compile. Aplicaciones y archivos de configuración del proyecto WDS y GAMMU Nombre gammu.sh para compilar nuevamente la aplicación.Maestría en Informática Aplicada en Redes hacia el administrador real en respuesta a la ejecución del comando solicitado.sql smsdrc Descripción Script para iniciar el aplicativo gammu con funcionalidad smsd Script para instalar el proyecto WDS Daemon que convierte mensajes entrantes en comandos Script para la creación de los objetos del esquema smsd Archivo de configuración de GAMMU y MySQL Página 46 de 82 . Los comandos disponibles por defecto en el sistema se encuentran en la carpeta scripts. En la carpeta src se encuentran los archivos fuentes del aplicativo java. los archivos colocados en la carpeta base del proyecto (wds-project-1.1. las tareas que realizan son sencillas y su único objetivo es el de comprobar el buen funcionamiento del sistema. si alguno o varios de estos archivos necesitara modificarse por alguna razón.sh i2icd wds_smsd.

1. Estructura de carpetas y archivos del proyecto WDS Página 47 de 82 . 4.Maestría en Informática Aplicada en Redes Fig.

tar.7 Instalado y configurado para ser iniciado cada vez que el equipo es encendido.tar.0.gz # tar -xvzf wds-project-1.0.5 o mayor.15 Configurar el constructor de GAMMU para nuestro sistema operativo y construir los binarios de GAMMU Página 48 de 82 .gz # tar -xvzf gammu-1.08. Listado de paquetes necesarios previo a la implementación del sistema WDS Nombre de paquete JRE versión 1. Perl 5.5 Intérprete de Perl 5.2.5. MySQL Server Versión 14.8.8.gz Cambiarse a la carpeta wds-project/installers y extraer el archivo gammu1.08.gz Cambiarse a la carpeta de instalación de gammu: # cd gammu-1.15.08.2.Maestría en Informática Aplicada en Redes 4.0_12 Descripción Instalado como parte funcional del sistema operativo.tar.3 Pasos a seguir para la instalación y configuración del proyecto WDS y de GAMMU Extracción del archivo wds-project-1.tar.15. instalado junto con librerías perl.2 Requisitos del sistema WDS Los requisitos para que el sistema WDS pueda ser instalado y configurado correctamente son mostrados en la tabla 4. Tabla 4. DBD y MySQL. 4.

...Maestría en Informática Aplicada en Redes # .. observe que en este../smsdrc Para este caso en el que se utiliza el móvil Siemmens S55.....so..conf # /sbin/ldconfig Modificar el archivo wds-project/smsdrc de acuerdo a sus requerimientos # vi ... [smsd] PIN = 0000 logfile = smsdlog commtimeout = 1 sendtimeout = 10 #--------------------------. number3 = 503. [gammu] port = /dev/ttyS0 connection = AT logfile = gammulog logformat = textall use_locking = yes # Los números de teléfonos incluidos en esta sección serán los unicos autorizados # de interactuar con el sistema WDS en el envió de comandos y recepción de mensajes [include_numbers] number1 = 503./.... /configure # make # make shared Instalar los binarios en las carpetas del sistema operativo # make install Instalar las librerias de GAMMU # make installshared Configurar las librerías de GAMMU dentro del sistema operativo # vi /etc/ld.. number2 = 503.smsd & MySQL configuration user = ... se encuentran las secciones de configuración de GAMMU con la funcionalidad smsd activada. password = . #[exclude_numbers] #number1 = 1234 # Sustituya las elipses en esta sección escribiendo su propio usuario y clave de conexión a # la base de datos MySQL... pc = localhost database = smsd Página 49 de 82 .... # Así mismo puede descomentar la siguiente sección y agregar números de teléfonos en # esta para denegar todos los mensajes recibidos por GAMMU desde teléfonos indeseables. la modificación del contenido del archivo smsdrc es la que se muestra líneas abajo.

$status) = (''.pl es iniciado.Maestría en Informática Aplicada en Redes Si el valor de la variable LANG no debería ser es_ES utilice el editor de texto plano vi. a la vez que se realizó la configuración de iniciar este daemon cada vez que se de el proceso de inicio del sistema operativo en el runtime level 5 (init 5). ''). SMSCNumber. setsid or die "Can't start a new session: $!". 0). $SenderNumber. my (@segments) = (). my $dsn = 'DBI:mysql:smsd:localhost'. while(1) { sleep(5). `echo $pid >/var/run/i2ic.pid`. my $install_dir = `cat /etc/wds.dir`. TextDecoded.sh es el siguiente #!/bin/sh export LANG=es_ES /usr/local/bin/gammu --smsd MYSQL /etc/smsdrc Ejecutar el script del shell setup. $TextDecoded. para modificar el script del shell gammu. my ($db_user_name.4 Scripts del sistema WDS Una vez realizada la configuración anterior y la ejecución del aplicativo setup. $MaxSecondsTime) = (''. my ($Id. my ($code. $ScriptLocation. ''. use POSIX qw(setsid). $j) = (0.sh para continuar con la instalación y configuración del proyecto WDS # .'/WDS'. El contenido de este daemon i2icd. # check for new messages # getting all register from inbox $sql = "select ID. ''). my ($ScriptName. processed. ''. ReceivingDateTime Página 50 de 82 . my ($i.'\n'). $SMSCNumber.sh el daemon <install_dir>/WDS/bin/i2icd. ''). my $sql = ''. ''. $ReceivingDateTime) = (0./setup. $processed.pl es el siguiente: use DBI. $ppid) = fork ) or die "Can't fork: $! ". defined( my ($pid. chdir $install_dir. my (@command_regs) = ()./gammu.'/bin'.sh # vi . exit if $pid. my (@inbox_regs) = ().sh 4.sh El contenido de gammu. $db_password) = split (`gunzip -c $install_dir/WDS/bin/wds`. SenderNumber. ''. chop($install_dir). umask 0. ''. ''.

$TextDecoded. $status = `$install_dir/bin/clientStart.sh $Id >>$install_dir/log/salida_$Id. &myDo($sql). '>$install_dir/log/salida_'. my (@result) = (). @inbox_regs = &query($sql). $TextDecoded. $db_password. ScriptLocation. $ScriptLocation. # updating to true all unprocessed registers $sql = "update inbox set processed = 'true' where ID = $Id".txt' or die "Can't write to salida_$Id. my $sql = @_[0]. while (my @res = $sth->fetchrow_array()) { push(@result. } if (!length($ScriptName)) { $ScriptName = 'Error'. AutoCommit => 0 }). Página 51 de 82 . SenderNumber. while ($i < ($#inbox_regs+1)) { ($Id. $db_user_name. IdInbox) values ('$ScriptName'.txt`.'. $dbh->disconnect. open STDOUT. '$Id')". } $sth->finish(). { RaiseError => 1. $processed.$Id. $j++. } $sql = "insert into inboxCommand (ScriptName. $ScriptLocation = '$install_dir/scripts'. SMSCNumber. MaxSecondsTime from command where Code = '$code'". '>$install_dir/log/salida_'. $ReceivingDateTime) = @{$inbox_regs[$i]}. $MaxSecondsTime) = @{$command_regs[$j]}.Maestría en Informática Aplicada en Redes from inbox where processed = 'false' order by 5 asc". '$ScriptLocation'. sub query { my $dbh = DBI->connect($dsn.txt' or die "Can't write to salida_$Id. $sth->execute. ScriptLocation. '$MaxSecondsTime'. $j = 0. $code = $segments[$#segments].$Id. &myDo($sql). MaxSecondsTime. } } exit(0).'. open STDERR. $i = 0. $i++. # code == 0 => meaning that error code was received $sql = "select ScriptName. @command_regs = &query($sql). $sth = $dbh->prepare($sql).'$SMSCNumber'. while ($j < ($#command_regs + 1)){ ($ScriptName. $code = $code ? $code : "0".txt:$!". '$SenderNumber'. my $sth = ''. $SenderNumber. # the command has the following structure # :code @segments = split /:/. [@res]).txt:$!". $SMSCNumber.

jar:$prj/lib/swarmcache-1.8-bin.jar:$prj/classes export CLASSPATH # Se ejecuta el aplicativo que procesara el nuevo mensaje recibido desde un cliente remoto # # $1 es el identificador del comando a ser procesado # java sv.jar:$prj/lib/concurrent-1.wds.4.8.3.jar:$prj/lib/commons-logging-1.jar:$prj/lib/jgroups-2. } El objetivo principal de este daemon es convertir los mensajes recibidos en la tabla inbox a registros de comandos en la tabla inboxCommand. para realizar esto.sh.jar:$prj/lib/commons-collections2. my $dbh = DBI->connect($dsn.jar:$prj/lib/ehcache-1.dir`.maestria.'/WDS' export prj # CLASSPATH define las librerias necesarias por el aplicativo WDS # CLASSPATH=.jar:$prj/lib/asm-attrs.wds.:$prj/lib/hibernate3.jar:$prj/lib/proxool-0.jar:$prj/lib/oscache-2.pl como su única capa de Página 52 de 82 .9.3. } sub myDo { my $sql = @_[0].1.11.jar:$prj/lib/c3p0-0.1.jar:$prj/lib/asm.jar:$prj/lib/jaas. $db_password. este se mantiene iterando en un lazo infinito y para cada iteracion se queda en estado ocioso 5 segundos para luego conectarse a la base de datos smsd para revisar por nuevos mensajes (Aquellos mensajes que tienen un valor de 'false' en la columna processed de la tabla inbox) y para cada mensaje satisfactoriamente procesado inicia el aplicativo java <install_dir>/WDS/bin/clientStart.Cliente es ejecutada pasándole como argumento el identificador del comando a procesar. también se observa que la capa de negocio de la aplicación java interactúa con el daemon i2ic.Maestría en Informática Aplicada en Redes return @result. pasando a este aplicativo como argumento el identificador del nuevo comando insertado en la tabla inboxCommand que es el comando que se deberá procesar.ufg.6.1.1.jar:$prj/lib/dom4j1.1.jar:$prj/lib/antlr2.jar:$prj/lib/mysql-connector-java-3.2. $db_user_name.jar:$prj/lib/cglib-2.6.jar:$prj/lib/jboss-system.8.2.jar:$prj/lib/jboss-common. $dbh->do($sql).7.0.3. { RaiseError => 1.2. $dbh->disconnect.ufg.jar:$prj/lib/log4j1.1. El código fuente del archivo ejecutable clientStart.negocio.jar:$prj/lib/jta.0.0rc2. AutoCommit => 0 }).Cliente $1 En este script se puede observar que se definen variables de entorno y luego la clase sv.jar:$prj/lib/connector.maestria.2.edu.sh es mostrado a continuación: #!/bin/bash # # prj es la carpeta actual de instalación del proyecto # prj=`cat /etc/wds.jar:$prj/lib/jboss-cache.jar:$prj/lib/jbossjmx.jar:$prj/lib/jdbc2_0-stdext.negocio.edu.

SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */. `Code` varchar(45) NOT NULL default ''.'WDS/scripts'.'Saludo'. UNLOCK TABLES.------------------------------------------------------.'WDS/scripts'.10. LOCK TABLES `daemons` WRITE. -.NULL). INSERT INTO `command` (1. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE.'2'. UNIQUE_CHECKS=0 */.(2.1. UNLOCK TABLES. --. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS. /*!40000 ALTER TABLE `daemons` ENABLE KEYS */.(3. -. FOREIGN_KEY_CHECKS=0 */.12 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */.Server version 4. Los objetos de la base de datos MySQL para el esquema smsd son creados a partir del siguiente archivo script: -.Table structure for table `gammu` DROP TABLE IF EXISTS `gammu`. `Description` text.'Error'. `ScriptName` text.'0'.NULL). /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES. -.Dumping data for table `command` /*!40000 ALTER TABLE `command` DISABLE KEYS */. /*!40000 ALTER TABLE `command` ENABLE KEYS */. /*!40101 SET NAMES utf8 */.Maestría en Informática Aplicada en Redes presentación el cual estaría solicitando servicios de procesamientos de comandos cada vez que nuevos mensajes sean recibidos y almacenados como peticiones de comandos en la tabla inboxCommand.9 --. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */.Table structure for table `daemons` DROP TABLE IF EXISTS `daemons`.Table structure for table `command` DROP TABLE IF EXISTS `command`. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */. CREATE TABLE `gammu` ( VALUES Página 53 de 82 .Dumping data for table `daemons` /*!40000 ALTER TABLE `daemons` DISABLE KEYS */.'WDS/scripts'. CREATE TABLE `command` ( `Id` int(11) NOT NULL auto_increment.10.MySQL dump 10. -. `ScriptLocation` text.10. CREATE TABLE `daemons` ( `Start` text NOT NULL.Host: localhost Database: smsd -. PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1. `MaxSecondsTime` int(11) default NULL.'1'. `Info` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8. SQL_NOTES=0 */. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS.'Ping'. LOCK TABLES `command` WRITE.NULL).

/*!40000 ALTER TABLE `gammu` ENABLE KEYS */. `UDH` text.'Unicode_No_Compression'.Table structure for table `outbox` DROP TABLE IF EXISTS `outbox`. `Status` varchar(20) default 'NoLeido'. `SMSCNumber` varchar(20) default NULL. PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1. `Coding` enum('Default_No_Compression'. `DestinationNumber` varchar(20) NOT NULL default ''. --.'Unicode_No_Compression'. `UDH` text NOT NULL. --.'Unicode_Compression') default '8bit'. INSERT INTO `gammu` VALUES (7). `SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00'. `IdInbox` int(11) default NULL. UNIQUE KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8.Dumping data for table `inboxCommand` /*!40000 ALTER TABLE `inboxCommand` DISABLE KEYS */. LOCK TABLES `inbox` WRITE. CREATE TABLE `inbox` ( `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP. `ID` int(11) unsigned NOT NULL auto_increment. `Coding` enum('Default_No_Compression'.Table structure for table `inbox` DROP TABLE IF EXISTS `inbox`. `Text` text NOT NULL.'8bit'.'8bit'. `Class` int(11) NOT NULL default '-1'. UNLOCK TABLES. --.'Unicode_Compression') NOT NULL default '8bit'. --. /*!40000 ALTER TABLE `inbox` ENABLE KEYS */.Dumping data for table `gammu` /*!40000 ALTER TABLE `gammu` DISABLE KEYS */.'Default_Compression'. `ScriptName` text NOT NULL. CREATE TABLE `inboxCommand` ( `Id` int(11) NOT NULL auto_increment. UNLOCK TABLES. `ReceivingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00'. LOCK TABLES `gammu` WRITE. --. `ScriptLocation` text. `TextDecoded` varchar(160) NOT NULL default ''. Página 54 de 82 . /*!40000 ALTER TABLE `inboxCommand` ENABLE KEYS */.Dumping data for table `inbox` /*!40000 ALTER TABLE `inbox` DISABLE KEYS */.Table structure for table `inboxCommand` DROP TABLE IF EXISTS `inboxCommand`. --. `SMSCNumber` varchar(20) NOT NULL default ''.Maestría en Informática Aplicada en Redes `Version` tinyint(4) NOT NULL default '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8. UNLOCK TABLES. `RecipientID` text NOT NULL. `Text` text.'Default_Compression'. `SenderNumber` varchar(20) NOT NULL default ''. `Processed` enum('false'. `MaxSecondsTime` int(11) NOT NULL default '3600'.'true') NOT NULL default 'false'. LOCK TABLES `inboxCommand` WRITE. CREATE TABLE `outbox` ( `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP. `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00'. `SenderNumber` varchar(20) default NULL.

`SenderID` text. --. UNLOCK TABLES. --. --. `TextDecoded` varchar(160) NOT NULL default ''.Table structure for table `pbk` DROP TABLE IF EXISTS `pbk`. /*!40000 ALTER TABLE `pbk` ENABLE KEYS */.Dumping data for table `pbk` /*!40000 ALTER TABLE `pbk` DISABLE KEYS */. `Coding` enum('Default_No_Compression'. `DeliveryReport` enum('default'. `SendingTimeOut` timestamp NULL default '0000-00-00 00:00:00'. LOCK TABLES `pbk` WRITE.'yes'. LOCK TABLES `outbox_multipart` WRITE. LOCK TABLES `outbox` WRITE.'true') default 'false'. `ID` int(11) unsigned NOT NULL auto_increment.Dumping data for table `outbox_multipart` /*!40000 ALTER TABLE `outbox_multipart` DISABLE KEYS */. `TextDecoded` varchar(160) default NULL. `CreatorID` text NOT NULL. UNIQUE KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8. --. `Number` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8. `SequencePosition` int(11) NOT NULL default '1' ) ENGINE=MyISAM DEFAULT CHARSET=utf8. UNLOCK TABLES. `RelativeValidity` int(11) default '-1'.Table structure for table `pbk_groups` DROP TABLE IF EXISTS `pbk_groups`. `Class` int(11) default '-1'. --. --. LOCK TABLES `pbk_groups` WRITE.'8bit'.Maestría en Informática Aplicada en Redes `Class` int(11) default '-1'. CREATE TABLE `pbk_groups` ( `Name` text NOT NULL. --. `ID` int(11) NOT NULL auto_increment. UNLOCK TABLES. UNLOCK TABLES. `INSERTLNDB` datetime default NULL.'Unicode_No_Compression'. /*!40000 ALTER TABLE `pbk_groups` ENABLE KEYS */.Table structure for table `outbox_multipart` DROP TABLE IF EXISTS `outbox_multipart`. /*!40000 ALTER TABLE `outbox` ENABLE KEYS */.'Unicode_Compression') default '8bit'. /*!40000 ALTER TABLE `outbox_multipart` ENABLE KEYS */. `Name` text NOT NULL. UNIQUE KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8.'Default_Compression'.Dumping data for table `pbk_groups` /*!40000 ALTER TABLE `pbk_groups` DISABLE KEYS */. `UDH` text. Página 55 de 82 .Dumping data for table `outbox` /*!40000 ALTER TABLE `outbox` DISABLE KEYS */. `ID` int(11) unsigned NOT NULL default '0'. CREATE TABLE `pbk` ( `GroupID` int(11) NOT NULL default '-1'. CREATE TABLE `outbox_multipart` ( `Text` text.'no') default 'default'. `MultiPart` enum('false'.

'351083521503632'.'2006-11-13 20:42:35'.08.3').'SendingOKNoReport'.15. gcc 3. `Client` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */.'yes'.'SendingError'.'Unicode_Compression') NOT NULL default '8bit'. INSERT INTO `phones` VALUES (''. `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00'.'yes'. `SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00'. `RelativeValidity` int(11) NOT NULL default '-1'. --.'DeliveryFailed'. `SenderID` text NOT NULL.'DeliveryPending'. Página 56 de 82 . --.Table structure for table `sentitems` DROP TABLE IF EXISTS `sentitems`.'Default_Compression'. `TPMR` int(11) NOT NULL default '-1'. /*!40000 ALTER TABLE `sentitems` ENABLE KEYS */.Dumping data for table `sentitems` /*!40000 ALTER TABLE `sentitems` DISABLE KEYS */.'DeliveryUnknown'. CREATE TABLE `sentitems` ( `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP. `Coding` enum('Default_No_Compression'. `IMEI` text NOT NULL. `CreatorID` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8.Dumping data for table `phones` /*!40000 ALTER TABLE `phones` DISABLE KEYS */. `ID` int(11) unsigned NOT NULL default '0'.6. `Receive` enum('yes'.'Error' ) NOT NULL default 'SendingOK'. `Status` enum('SendingOK'.'no') NOT NULL default 'no'.Maestría en Informática Aplicada en Redes --.'2006-11-13 20:42:45'. /*!40000 ALTER TABLE `phones` ENABLE KEYS */. `SMSCNumber` varchar(20) NOT NULL default ''. `DeliveryDateTime` timestamp NOT NULL default '0000-00-00 00:00:00'. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */. UNLOCK TABLES. `TimeOut` timestamp NOT NULL default '0000-00-00 00:00:00'. `Send` enum('yes'. LOCK TABLES `sentitems` WRITE. kernel 2. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */.'no') NOT NULL default 'no'.'2006-11-13 --. `InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00'.'8bit'.'DeliveryOK'. `Class` int(11) NOT NULL default '-1'. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */. 16:52:13'. `TextDecoded` varchar(160) NOT NULL default ''. Linux. `UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP. `SequencePosition` int(11) NOT NULL default '1'. UNLOCK TABLES. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */.'Gammu 1. `Text` text NOT NULL.'Unicode_No_Compression'. LOCK TABLES `phones` WRITE. `DestinationNumber` varchar(20) NOT NULL default ''.Table structure for table `phones` DROP TABLE IF EXISTS `phones`. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */.8-24-default. `StatusError` int(11) NOT NULL default '-1'. `UDH` text NOT NULL. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */. CREATE TABLE `phones` ( `ID` text NOT NULL.

En la capa de dominio se han colocado las clases que son persistidas en la base de datos a través del motor de persistencia hibernate.wds. 4.5 Aplicación Java A continuación se detallan las clases creadas en la plataforma Java y que son utilizadas para ejecutar los comandos solicitados desde el administrador físico y enviarle la respuesta.sh). en la siguiente figura se muestra el diagrama UML de esta aplicación.Maestría en Informática Aplicada en Redes El script anterior es ejecutado por el gestor de base de datos a solicitud del instalador del proyecto WDS (setup.Cliente.maestria. Página 57 de 82 . se realiza por medio de la clase sv.negocio.edu. como podrá observarse la estructuración de esta aplicación se ha desarrollado haciendo uso del modelo de programación en capas. y que son los objetos que las clases en los paquetes de datos y negocio mueven a través de la aplicación.ufg. El procesamiento de los comandos.

dominio.edu. import sv. private String senderNumber. private String scriptName. private String status.maestria. private int maxSecondsTime.Maestría en Informática Aplicada en Redes A continuación se muestra el código fuente de la clase sv. private int idInbox.datos.edu.ufg.wds.maestria.ufg.maestria. Página 58 de 82 . public class InboxCommand { private int id.InboxCommand package sv.ufg.*.wds.dominio.edu.wds.

else return ic. } public void setsMSCNumber(String number) { sMSCNumber = number. } public void setId(int id) { this.scriptName = scriptName.senderNumber = senderNumber.id = id. private String scriptLocation.Maestría en Informática Aplicada en Redes private String sMSCNumber. } public void setSenderNumber(String senderNumber) { this. } public int getMaxSecondsTime() { return maxSecondsTime. if (ic == null) return null. } public void setScriptLocation(String scriptLocation) { this. } public String getStatus() { return status. } public String getSenderNumber() { return senderNumber.obtener(id). public static InboxCommand obtener(String id){ DAOInboxCommand dic = new DAOInboxCommand(). } public int getIdInbox() { return idInbox. } public String getScriptLocation() { return scriptLocation. } public void setIdInbox(int idInbox) { this. } public void setMaxSecondsTime(int maxSecondsTime) { this. } public String getsMSCNumber() { return sMSCNumber. } public void setScriptName(String scriptName) { this.idInbox = idInbox.maxSecondsTime = maxSecondsTime. } Página 59 de 82 .scriptLocation = scriptLocation. InboxCommand ic = dic. } public String getScriptName() { return scriptName. } public int getId() { return id.

setDeliveryReport("default"). this. public class Outbox { private int id. long time1 = date1.*. return strHex.util.dominio. private String text.ufg. return daoOutbox.maestria. this.toHexString( (int)st. private String coding.charAt( i ) ). private String deliveryReport. private Timestamp inserlnDB. private Timestamp sendingTimeOut. private int CLASS.guardarNuevo(o). } public void llenarValores(InboxCommand ic.wds.dominio. } } El código fuente de la clase sv.Date date1 = new java. private String textDecoded. private Timestamp sendingDateTime.Timestamp(time1)).maestria. import java.length().setDestinationNumber(ic. private Timestamp updatedInDb. private String senderId.util. this.setTextDecoded(resultadoDelComando). private boolean multipart. } public void setCoding(String coding) { this. i<st.setText(this.setMultipart(false).wds. i++) strHex += Integer.edu.convertirCadenaAHexa(resultadoDelComando)).Date ( ) . private String creatorId. private String udh.edu. import sv. } public String getCoding() { return coding. this.getSenderNumber()). this. private String destinationNumber.Outbox es mostrado a continuación: package sv.Maestría en Informática Aplicada en Redes public void setStatus(String status) { this.datos. private int relativeValidity. this.ufg.setSendingTimeOut(new java. this.sql.setCreatorId(" ").status = status.sql.parse ( date1.edu. this. public String guardarNuevo(Outbox o){ DAOOutbox daoOutbox = new DAOOutbox().setRelativeValidity(-1). } Página 60 de 82 .ufg.toString() ) .Timestamp. for(int i = 0.setCLASS(-1). this.maestria.coding = coding.wds. String resultadoDelComando){ java. } private String convertirCadenaAHexa(String st){ String strHex = new String("").setCoding("8bit"). this.

} public int getId() { return id. } public void setSenderId(String senderId) { this. } public String getDeliveryReport() { return deliveryReport.Maestría en Informática Aplicada en Redes public String getCreatorId() { return creatorId.relativeValidity = relativeValidity. } public void setCreatorId(String creatorId) { this. } Página 61 de 82 . } public void setInserlnDB(Timestamp inserlnDB) { this. } public void setMultipart(boolean multipart) { this.destinationNumber = destinationNumber. } public void setId(int id) { this.sendingDateTime = sendingDateTime. } public void setRelativeValidity(int relativeValidity) { this.id = id. } public String getDestinationNumber() { return destinationNumber. } public void setDeliveryReport(String deliveryReport) { this.inserlnDB = inserlnDB.multipart = multipart. } public Timestamp getSendingDateTime() { return sendingDateTime. } public void setSendingDateTime(Timestamp sendingDateTime) { this. } public String getSenderId() { return senderId. } public int getRelativeValidity() { return relativeValidity.deliveryReport = deliveryReport.creatorId = creatorId. } public boolean isMultipart() { return multipart. } public Timestamp getInserlnDB() { return inserlnDB.senderId = senderId. } public void setDestinationNumber(String destinationNumber) { this.

udh = udh. } public void setUdh(String udh) { this. } public int getCLASS() { return CLASS. } public void setUpdatedInDb(Timestamp updatedInDb) { this.DAOInboxCommand y DAOOutbox es mostrado a continuación: package sv.edu. } public void setTextDecoded(String textDecoded) { this. } public void setText(String text) { this.dominio.ufg. import sv.textDecoded = textDecoded.*.maestria. El código fuente de las clases sv. } public String getTextDecoded() { return textDecoded. } public Timestamp getUpdatedInDb() { return updatedInDb.Maestría en Informática Aplicada en Redes public Timestamp getSendingTimeOut() { return sendingTimeOut. } public String getUdh() { return udh.updatedInDb = updatedInDb.text = text. Página 62 de 82 . } } En la capa de datos se desarrollan las clases encargadas de persistir en la base de datos objetos de la capa de dominio a través del motor de persistencia de hibernate. } public void setSendingTimeOut(Timestamp sendingTimeOut) { this.wds.sendingTimeOut = sendingTimeOut.datos.wds.edu. } public void setCLASS(int class1) { CLASS = class1.edu.maestria.maestria.ufg.ufg. } public String getText() { return text.wds. en esta se implementan funcionalidades como leer y actualizar objetos.

openSession().update(ic). sesion.hibernate.ufg.flush().hibernate. public class DAOOutbox { public String guardarNuevo(Outbox o){ try{ SessionFactory sessionFactory = new Configuration().Maestría en Informática Aplicada en Redes import org. sesion.Session.ufg. Session sesion = sessionFactory. sesion.SessionFactory. import java. sesion.edu.setStatus("Leido").status='NoLeido' and inboxCommand. } } public void actualizar(InboxCommand ic){ SessionFactory sessionFactory = new Configuration().buildSessionFactory().Configuration.Configuration. sesion. import org. import org. this. import sv.openSession().datos. import org.openSession().wds.idInbox=" + id).Session.flush(). sesion.maestria. Session sesion = sessionFactory.close().maestria.cfg. return ic.configure().get(0).isEmpty()){ return null.getLocalizedMessage() .buildSessionFactory().save(o).getCause(). List inboxCommand = sesion.cfg. } } return null.configure(). } catch(Exception e){ return e.close(). } Página 63 de 82 .configure(). ic. sesion. public class DAOInboxCommand { public InboxCommand obtener(String id){ try { SessionFactory sessionFactory = new Configuration(). import org. Session sesion = sessionFactory.edu.SessionFactory.createQuery("from InboxCommand as inboxCommand where inboxCommand.hibernate.list(). }else{ InboxCommand ic = (InboxCommand)inboxCommand.hibernate. import org.List.actualizar(ic).util.hibernate. if (inboxCommand.wds.dominio. } }catch (Exception ex) { return null.*.hibernate.close().buildSessionFactory(). } } package sv.

Maestría en Informática Aplicada en Redes En la capa de negocio se han colocado las clases encargadas de definir la lógica de ejecución del aplicativo.negocio. import sv. } public InboxCommand leerComando(String id) { InboxCommand ic = InboxCommand.length() > 0){ Administrador a = new Administrador().maestria.print("ERR: NO ARGS").ufg. return ic.*.ufg. }else{ System.getInputStream().llenarValores(ic.ufg.wds.wds.dominio.ufg.obtener(id).getScriptName()).readLine().wds. o. esta interactúa con el administrador real a través del daemon i2ic al momento de ingresar nuevas solicitudes de comandos. } } } = Página 64 de 82 .getMessage().exec (comando). Outbox o = new Outbox(). InputStream is = p.leerComando(args[0]). InboxCommand ic = a. BufferedReader br = new BufferedReader (new InputStreamReader (is)). el código fuente de las clases de esta capa se presenta a continuación: package sv. public class Administrador { public String ejecutarComando(String comando){ try { if(comando == null){ comando = "/scripts/Error". import sv.*.edu.edu.guardarNuevo(o).edu. String resultadoDelComando a. } } package sv. resultadoDelComando).dominio. } catch (Exception e) { return e.*.out. return br. import java.wds. return outbox.print( a. System.getScriptLocation()+"/"+ic. } } public String enviarResultado(Outbox o){ Outbox outbox = new Outbox().enviarResultado(o)). public class Cliente { public static void main(String[] args) { if ( args[0].negocio.ejecutarComando(ic. } Process p = Runtime.out.getRuntime().maestria.edu.io.

Archivo hibernate.connection.net/hibernate-mapping-3.mysql.hbm2ddl.0//EN" "http://hibernate.ufg.xml"/> <mapping resource="InboxCommand.sourceforge.hbm y Outbox.Maestría en Informática Aplicada en Redes Hibernate necesita un archivo de configuración general llamado hibernate.password"></property> <property name="hibernate.wds.connection.edu.Driver</property> <property name="hibernate.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.hibernate.sourceforge.0.net/hibernate-configuration-3.hbm. El contenido de estos archivos es mostrado a continuación.cfg.cfg.MySQLDialect</property> <property name="hibernate.pool_size">10</property> <property name="show_sql">true</property> <property name="dialect">org.dtd"> <hibernate-mapping> <class name="sv.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.jdbc.xml <?xml version='1.connection.0.dialect.dominio.auto">update</property> <!-.connection.Mapping files --> <mapping resource="Outbox.InboxCommand" table="inboxCommand"> <id name="id" type="integer" column="ID" > <generator class="assigned"/> </id> <property name="scriptName"> <column name="ScriptName" /> </property> <property name="idInbox"> <column name="IDINBOX" /> </property> <property name="status"> <column name="STATUS" /> </property> <property name="maxSecondsTime"> <column name="MaxSecondsTime" /> </property> <property name="senderNumber"> <column name="SenderNumber" /> Página 65 de 82 .username"></property> <property name="hibernate.hbm.xml <?xml version="1.hbm.maestria.xml"/> </session-factory> </hibernate-configuration> Archivo InboxCommand.connection.driver_class">com.xml y un archivo de correspondencia por cada clase que deba ser persistida en la base de datos.url">jdbc:mysql://localhost/smsd</property> <property name="hibernate.xml corresponden a las clases InboxCommand y Outbox respectivamente. en este caso los archivos de correspondencia InboxCommand.hbm.

hbm.0//EN" "http://hibernate.Maestría en Informática Aplicada en Redes </property> <property name="sMSCNumber"> <column name="SMSCNumber" /> </property> <property name="scriptLocation"> <column name="ScriptLocation" /> </property> </class> </hibernate-mapping> Archivo Outbox.Outbox" table="outbox"> <id name="id" type="integer" column="ID" > <generator class="assigned"/> </id> <property name="updatedInDb"> <column name="UPDATEDINDB" /> </property> <property name="inserlnDB"> <column name="INSERTLNDB"/> </property> <property name="sendingDateTime"> <column name="SENDINGDATETIME"/> </property> <property name="text"> <column name="TEXT"/> </property> <property name="destinationNumber"> <column name="DESTINATIONNUMBER"/> </property> <property name="coding"> <column name="CODING"/> </property> <property name="udh"> <column name="UDH"/> </property> <property name="CLASS"> <column name="CLASS"/> </property> <property name="textDecoded"> <column name="TEXTDECODED"/> </property> <property name="multipart"> <column name="MULTIPART"/> </property> <property name="relativeValidity"> <column name="RELATIVEVALIDITY"/> </property> <property name="senderId"> <column name="SENDERID"/> </property> <property name="sendingTimeOut"> <column name="SENDINGTIMEOUT"/> </property> <property name="deliveryReport"> <column name="DELIVERYREPORT"/> </property> <property name="creatorId"> <column name="CREATORID"/> </property> </class> </hibernate-mapping> Página 66 de 82 .xml <?xml version="1.0.dtd"> <hibernate-mapping> <class name="sv.edu.net/hibernate-mapping-3.wds.maestria.ufg.sourceforge.dominio.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.

0** * Incluidos en el CD de este proyecto.0** o Proyecto Gammu:1.2 Teléfono celular: Siemens s55 Servidor: PC / Workstation / Server. en la carpeta \instaladores ** Configurados automáticamente con el instalador de WDS Tanto el sistema operativo del servidor como el modelo del celular usado para la presente implementación pueden variar. Prototipo y resultados alcanzados En este capítulo se encuentran los pasos necesarios para usar el prototipo funcional desarrollado en este proyecto. Página 67 de 82 . Componentes requeridos y sus especificaciones (ver capítulo IV para los pormenores de la instalación y configuración de WDS): • • • Sistema operativo: SUSE Linux 9.Maestría en Informática Aplicada en Redes V. En esta prueba se enviará un mensaje de texto con el contenido siguiente :1 como se muestra en la imagen. Disco duro 200MB o superior. además se presentan los resultados de las pruebas realizadas. en promedio 512MB. RAM requerida la mínima demandada por el sistema operativo. • SW del proyecto WDS: CD de instalación* o Instalador o Hibernate: 3. A continuación se detallan los pasos a seguir para experimentar con el prototipo: Experimento 1: Prueba de instalación.

Un siguiente demonio i2ic. El celular que ha enviado el comando :1 deberá estar recibiendo de inmediato el resultado de la aplicación del script. No necesariamente numérico. La estructura anterior. el demonio smsd lo leerá y lo colocará en la tabla Inbox. enviándola como mensaje de salida a la tabla Outbox. en su pantalla se debe leer SALUDOS DESDE WDS Con esto se puede concluir que todo el sistema está bien instalado y configurado apropiadamente. el comando 1 está asociado a un archivo Script llamado saludo. I2ic ejecutará el programa administrador en Java. indica que habrá que tomar el carácter 1 y buscarlo en la tabla de comandos de la base de datos. que estarán activos inmediatamente se haga la instalación: Página 68 de 82 . habiendo ya detectado cuál es el comando y además cuál es el archivo de script correspondiente.sh. El comando :1 tiene la siguiente estructura : Es la secuencia de escape. es decir una letra reservada. se han adicionado los siguientes comandos. A partir de este punto. A manera de ejemplo. en el esquema smsd de mysql.Maestría en Informática Aplicada en Redes Esto representa al comando etiquetado con el caracter uno y que está incluido como parte de los comandos por defecto del proyecto WDS. el cual ejecuta en el sistema operativo el comando correspondiente y captura la salida del comando. En este caso. lo colocará en la tabla InboxCommand. cuyo contenido es el siguiente: Cuando el mensaje sea recibido por el celular conectado al servidor. es decir. que indica el inicio del comando C Representa el o los caracteres que identifican el comando a ejecutar. se podrán crear todos los scripts de acuerdo a la necesidad del administrador.

Maestría en Informática Aplicada en Redes Código :0 :1 :2 Nombre Script Error. 10. habrá que crearlo. Primero se creará un script en algún lenguaje de programación. con el mensaje :wwwStop Una vez recibido el mensaje de respuesta desde el servidor. por medio del sql siguiente Insert into command values (’apache_stop’. se debe verificar que el servicio Web está detenido. Dado que este comando no existe. en este caso. ‘/root/WDS/scripts’. bash.sh Saludo.sh Acción Respuesta a un código no registrado Envía texto de saludo desde el Server Ejecuta un ping a localhost Experimento 2: Detener del servicio http de apache En esta prueba se enviará un mensaje de texto con el contenido siguiente :webStop El resultado esperado es que el servidor detenga el servicio web http.sh Ping. Página 69 de 82 . ‘webStop’) Desde el celular del administrador físico. dándose por finalizada con éxito la presente prueba. se enviará un mensaje al celular colocado en el servidor.d/apache2 stop | grep done Para ingresar el comando al sistema WDS se insertará un renglón en la tabla Command. El script podrá llamarse apache_stop el cual se colocará en la carpeta scripts del proyecto WDS El contenido del archivo de script apache_stop es el siguiente: #!/bin/bash /etc/init.

• Por las razones anteriores. Consultar por un trámite en hacienda :renta nit=0614-130368-004-3. estarán al alcance del resto de empresas. tramite de su crédito en su banco :credito cliente=12345. la cual puede contener contacto con otros servidores (Web Services) o con otros mecanismos o dispositivos. se establece por medio de este proyecto. Por ejemplo un corredor de bolsa. Una aerolínea podría poner el servicio de confirmación del vuelo por medio del mensaje :confirm reserva=12345. sino más bien puede ser un inicio para la explotación comercial de interacciones desde celular a otra máquina.Maestría en Informática Aplicada en Redes Dadas las anteriores pruebas se establece que: • • Se ha creado un mecanismo fácil. Página 70 de 82 . que muchas de las aplicaciones comerciales que eran reservadas para aquellas compañías que poseían plantas telefónicas. encuestas de opinión :voto 2 y así un innumerable sin fin de aplicaciones comerciales. La exposición del control remoto no se limita a aplicaciones de control de servidor. puede enviar el mensaje :precioAccion cliente=ufg el cual le retornaría el precio de las acciones en este instante en la bolsa de valores. económico y seguro para poder controlar un servidor desde un teléfono celular por medio de mensajes cortos.

Los aportes del proyecto a la sociedad: En la actualidad. segura y económica. no hay forma en la cual una empresa pueda tomar control remoto de un servidor. Lo anterior establece un dialogo o interacción entre dos entidades que por su naturaleza están supuestas a no interactuar sin una planta telefónica. De ahora en adelante. ambos dispositivos se podrán considerar fusionados por el proyecto WDS. D. se ha establecido una comunicación en dos vías. el hecho de poder hacer que un servidor corporativo obedezca comandos enviados desde un celular. de una manera fácil. C. Adicionalmente. Aportes a la comunidad científica: por medio del presente proyecto. entre celular y la PC. Gracias al presente trabajo de investigación. Conclusiones generales A. se resumen en que ha sido posible ejecutar desde un celular. Página 71 de 82 . Principio que abrió la brecha para hacer lo opuesto: manejar la PC desde el celular.Maestría en Informática Aplicada en Redes VI. se han conocido diferentes proyectos de código abierto. En concreto los resultados de la investigación. B. uno o más comandos y recibir a vuelta de mensaje corto. podrá iniciar una revolución de innovadores servicios que las empresas podrán brindar por medio de la interacción desde los celulares de los clientes. orientados al manejo de celulares desde la PC. el resultado de la aplicación de dichos comandos. abriendo la brecha para una nueva generación de avances científicos sobre este hecho. tales como el proyecto GNOKI y GAMMU.

Fecha de consulta: 23/11/2006 http://es.org/wiki/Eclipse_(computaci%C3%B3n) Wyke.com/issue/58/Gammu_und_Wammu.pdf • • • • • • • Página 72 de 82 . 640 p. Fecha de consulta: 25/11/2007 http://es. Bogota. 2006. Linux Magazine [En línea] Citado: Septiembre de 2005. 2002. ISBN 1590595963. Inc.wikipedia. 190 p. Thomas.. 400 p. Allen. California. ISBN 970-26-0846-5. ISBN 958-41-0296-6. [En linea] 2006. 1ª Edición. James Elliott Hibernate: a developer's notebook. UML. Tony Butcher Sams Teach Yourself MySQL in 21 Days. Sams Publishing. 514 p. 359 p. Wikipedia Eclipse Software. 1ª Edición. 2004. Wikipedia Lomboz.org/wiki/Lomboz Brian Sam-Bodden Beginning POJOs: From Novice to Professional. ISBN 0596006969.Maestría en Informática Aplicada en Redes Bibliografía • Villalobos S. 2004. 2003. X. Editorial: Apress.linux-magazine. Mc Graw Hill. 1ª Edición. México. Fundamentos de programación aprendizaje activo basado en casos: un enfoque moderno usando Java. objetos y eclipse. 2006.wikipedia. ISBN 0672323923 Managing your mobile phone with Gammu and Wammu Directory Services. Co. Donald Fundamentos de programación en Perl. 1ª E dición. Publicado por O’Reilly media. Editorial: Pearson Educación. Jorge A. USA. Disponible en Internet: http://www. USA.

• Fin del saldo en la tarjeta. se adquiera un contrato con una compañía telefónica. Durante el desarrollo del proyecto. se recomienda tener redundancia al menos de dos aparatos telefónicos en el Server. Limitantes técnicas a considerar en la implementación del proyecto WDS B. • Desperfectos del equipo celular. se probó con diversos proveedores siendo el tiempo máximo de espera de 30 segundos.Limitantes técnicas a considerar en la implementación del proyecto WDS Existen ciertos factores técnicos que deben considerarse previo a la implementación de un proyecto con esta tecnología de mensajes cortos desde celular. Teléfonos soportados E.Maestría en Informática Aplicada en Redes Anexos En este apartado se detallan las siguientes consideraciones. Análisis Costo-Beneficio C. Habrá que realizar pruebas preliminares a fin de establecer cuál proveedor conviene más en función de la señal que se reciba en el lugar en donde el teléfono estará en operación. con el propósito de realizar el reemplazo oportuno a fin de que siempre esté en funcionamiento. Contingencia de la solución D. sin embargo se recomienda establecer con el proveedor de servicios telefónicos un Página 73 de 82 . A. Si esto no fuere posible. de dos diferentes compañías. Debe verificarse el período de vida útil del aparato celular. a fin de evitar inconvenientes por falta de saldo en el teléfono celular. Conjunto de caracteres Anexo A . • Retardo en la entrega o envío de mensajes de otro proveedor. Las consideraciones más importantes son las siguientes: • Cobertura de la señal del proveedor. Se recomienda que para este tipo de proyecto. Se recomienda tener comunicación entre celulares de la misma compañía.

00 $5. Análisis Costo-Beneficio El esquema de costro beneficio para este Framework desarrollado puede ser calculado de acuerdo a cada caso. Es recomendable que el aparato telefónico se encuentre conectado a la PC por medio del puerto USB a fin de que la batería esté permanentemente en carga Anexo B. Se ha tomando como base un salario de $1500.500. pues este podrá controlar el servidor de manera remota.00 por mes para un administrador de servidor Web (Web master). al menos uno que aplicará en todos los casos.00 B.00 $1. que se ahorrará. Ahorros por el nuevo sistema Costo de Personal 1 administrador Web 7/24 nocturno Ahorro por Mes Costo $1.00 $955. pero se considera un promedio.Maestría en Informática Aplicada en Redes contrato en donde se establezca la calidad del servicio brindado en relación a la mensajería de texto.1 Costo de inversión inicial Inversión para el nuevo sistema Costo del equipo (PC) Linux 512M Ram.500.00 $50. 1. pero en general se pueden tomar los siguientes costos estimados para una inversión inicial B.00 $0.00 $100.00 Página 74 de 82 . el cual podrá variar entre empresas. • Carga de la batería.7 GHz Costo de infraestructura Mobiliario para el servidor 1 licencia SUSE Linux 1 teléfono celular para Server 1 chip Total Costo $800. es el recurso humano de planta. 40G HD.2 Beneficios A pesar que los ahorros pueden derivarse de una gran cantidad de aspectos.

40 1500 -$1.40 1500 -$1.449.449.40 1500 -$1.40 1500 -$1.3 Costo de operación mensual En cada uno de los meses habrá que estimar el volumen de mensajes a enviar y recibir desde el sistema WDS.60 $50.00 1500 -$505. lo cual permitiría superar una eventual falla en el equipo o de la red telefónica de un proveedor.60 $50. Anexo C.449.60 $50.449.40 1500 -$1.60 $50.60 $50.449.00 $50.449.449. Una cantidad de 30 mensajes por día resultaría en 210 por semana y esto a su vez significa 840 SMS por mes.40 1500 -$1. asumiendo celulares con diferente proveedor.60 $50.449.06 da como resultado un costo mensual de $50.40 1500 -$1.60 $50.60 -$16.449.450.40 1500 -$1.60 Se concluye que la operación con el sistema WDS tiene una recuperación de la inversión inmediata. Contingencia de la solución En relación a contingencias. se establecen las siguientes consideraciones: • Redundancia con celulares: Puede instalarse más de un teléfono celular.40 B.60 $50.449.Maestría en Informática Aplicada en Redes B.4 Recuperación de la inversión Mes Mes 1 Mes 2 Mes 3 Mes 4 Mes 5 Mes 6 Mes 7 Mes 8 Mes 9 Mes 10 Mes 11 Mes 12 Total RECUPERACIÓN ANUAL costo beneficio neto $995. a una tasa de $0. Página 75 de 82 .40 1500 -$1.40 1500 -$1.60 $50.60 $50.40 1500 -$1.449.

Maestría en Informática Aplicada en Redes • Redundancia de administrador virtual: Puede instalarse más de un sistema de administración virtual WDS en la red. • Reporte de robo de terminal de administrador: En el evento de extravío o robo del celular del administrador físico. Teléfonos soportados Alcatel One Touch 501 Alcatel One Touch 512 Alcatel One Touch 535 Alcatel One Touch 701 Alcatel One Touch 715 Alcatel One Touch 735 Alcatel One Touch 801E BenQ-Siemens C31 at115200 BenQ-Siemens EF81 at115200 Falcom Twist USB at115200 LG U8210 at115200 LG U8330 at115200 Motorola A835 bluerfat Motorola A835 at115200 Motorola C390 at115200 Motorola C550 at19200 Motorola C650 at19200 Motorola E375 at19200 Motorola E375 at19200 Motorola e815 at115200 Motorola KRZR K1 bluerfat Motorola L2 at19200 Motorola L6 at19200 Motorola mpx220 Motorola Razor V3r Motorola RAZRV6 at Motorola RIZR Z3 Motorola SLVR 7 Motorola V1075 Motorola V150 Motorola V180 Motorola v190 Motorola v195 Motorola V220 Motorola V3 Nokia 6151 Nokia 6151 Nokia 6170 Nokia 6210 Nokia 6210 Nokia 6220 Nokia 6225 Nokia 6225 Nokia 6230 Nokia 6230 Nokia 6230 Nokia 6230 Nokia 6230i Nokia 6230i Nokia 6230i Nokia 6230i Nokia 6230i Nokia 6233 Nokia 6233 Nokia 6234 Nokia 6270 Nokia 6280 Nokia 6280 Nokia 6280 Nokia 6288 Nokia 6300 Nokia 6300 Nokia 6310 Nokia 6310i Nokia 6310i Nokia 6310i Nokia 6310i Nokia 6310i Nokia 6340i Nokia 6600 Siemens A60 Siemens A65 Siemens AF51 Siemens AX75 Siemens C35i Siemens C45 Siemens C55 Siemens C60 Siemens C61 Siemens C62 Siemens C65 Siemens C66 Siemens C6V Siemens CF62 Siemens CF75 Siemens CX65 Siemens CX75 Siemens ES75 Siemens M55 Siemens M56 Siemens M65 Siemens MC35i Siemens MC60 Siemens MC75 Siemens ME75 Siemens MT50 Siemens S150 Siemens S35i Siemens S45 Siemens S55 Siemens S65 Siemens S75 Siemens SL45i Siemens TC35 Sony Ericsson J300i Página 76 de 82 . a fin de tener redundancia de servicio. Anexo D. deberá modificar el archivo wds-project/smsdrc en la sección [exclude_numbers].

Maestría en Informática Aplicada en Redes Motorola V300/V40 Motorola V360 Motorola V360v Motorola V365 Motorola V3i Motorola V3r Motorola v3x Motorola V500 Motorola V501 Motorola V547 Motorola V551 Motorola v620 Motorola V80 Nokia 2125i Nokia 3100 Nokia 3100 Nokia 3100 Nokia 3105 Nokia 3110 Nokia 3120 Nokia 3120 Nokia 3200 Nokia 3200 Nokia 3205 Nokia 3210 Nokia 3220 Nokia 3220 Nokia 3220 Nokia 3220 Nokia 3220 Nokia 3310 Nokia 3510i Nokia 3586 Nokia 3589i Nokia 3650 Nokia 5110 Nokia 5140 Nokia 5200 Nokia 5200 Nokia 5200 Nokia 6015i Nokia 6020 Nokia 6020 Nokia 6021 Nokia 6021 Nokia 6021 Nokia 6021 Nokia 6030 Nokia 6600 Nokia 6610 Nokia 6610 Nokia 6610 Nokia 6610i Nokia 6610i Nokia 6630 Nokia 6670 Nokia 6680 Nokia 6680 Nokia 6680 Nokia 6681 Nokia 6810 Nokia 6820 Nokia 6820 Nokia 6820 Nokia 7110 Nokia 7110 Nokia 7210 Nokia 7250i Nokia 7610 Nokia 8800 Nokia 8910 Nokia E50 Nokia E60 Nokia E61i Nokia E62 Nokia E70 Nokia N30 Nokia N70 Nokia N75 Nokia N93 Sagem My501Ci Sagem my501X Sagem myC4-2 Sagem myC5 GP Sagem myV-55 Sagem myX5-2 Sagem myX6-2 Sagem myZ-5 G Samsung e350e Samsung SGH D500e Samsung SGH X530 Samsung SGH-A701 Samsung SGH-C230 Samsung SGH-D500 Samsung SGH-E250 Samsung SGH-E330 Sony Ericsson K300i Sony Ericsson K300i Sony Ericsson K310i Sony Ericsson K320i Sony Ericsson K500i Sony Ericsson K510i Sony Ericsson K510i Sony Ericsson K550i Sony Ericsson K550im Sony Ericsson K600i Sony Ericsson K608i Sony Ericsson K608i Sony Ericsson K610i Sony Ericsson K618i/V Sony Ericsson K700i Sony Ericsson K700i Sony Ericsson K750i Sony Ericsson K750i Sony Ericsson K750i Sony Ericsson K790a Sony Ericsson K800i Sony Ericsson K800i Sony Ericsson K800i/K Sony Ericsson P800 Sony Ericsson P800 Sony Ericsson P910a Sony Ericsson P990i Sony Ericsson R320s Sony Ericsson S700i Sony Ericsson T230 Sony Ericsson T230 Sony Ericsson T39m Sony Ericsson T610 Sony Ericsson T610 Sony Ericsson T630 Sony Ericsson T630 Sony Ericsson T637 Sony Ericsson T68i Sony Ericsson V600i Sony Ericsson V600i Sony Ericsson V800 Sony Ericsson V802SE Sony Ericsson W200i Sony Ericsson W300i Sony Ericsson W300i Sony Ericsson W550i Sony Ericsson W700i Sony Ericsson W800i Página 77 de 82 .

). esta codificación es utilizada para el envió de mensajes cortos en lenguajes internacionales distintos al ingles. puntuaciones y algunos símbolos (ver tabla E. De 140 caracteres de largo escritos con un conjunto de caracteres de 8 bits. muchos teléfonos antiguos no pueden desplegar mensajes codificados en formato de 8 bits. numerales.1).40 de la ETSI (European Telecommunications Standards Institute) las cuales especifican que los mensajes de textos pueden ser: De 160 caracteres de largo escritos con un conjunto de caracteres de 7-bit el cual incluye todo el alfabeto ingles. la habilidad para desplegar este tipo de caracteres Página 78 de 82 . configuración WAP. observe en esta tabla que varios símbolos son de 14 bits de longitud (Ej. etc.38 y 03.Maestría en Informática Aplicada en Redes Nokia 6030 Nokia 6070 Nokia 6080 Nokia 6100 Nokia 6100 Nokia 6101 Nokia 6101 Nokia 6102 Nokia 6103 Nokia 6103 Nokia 6108 Nokia 6110 Nokia 6110 Nokia 6111 Nokia 6131 Nokia 6131 Nokia 6131 Samsung SGH-E370 Samsung SGH-E900 Samsung SGH-X660 Samsung SGH-X680 Samsung SGH-Z107 Samsung SGH-Z150 Samsung SGH-Z300 Samsung SGH-Z400 Samsung SGH-Z500 Samsung SGH-ZV60 Samsung SGN 630 Samsung SHG D900 Samsung T509 Samsung V200 Samsung X100 Samsung Z300 Siemens A56 Sony Ericsson W810i Sony Ericsson W810i Sony Ericsson W850i Sony Ericsson W880i Sony Ericsson W950i Sony Ericsson Z1010 Sony Ericsson Z550i Sony Ericsson Z600 Sony Ericsson Z610i Sony Ericsson Z800 Toshiba TS 608 Nokia 3220 Sony Ericsson W810i Sony Ericsson T610 Nokia 3200 Nokia 6680 Nokia 6151 Anexo E. Set de caracteres soportados para mensajes cortos SMS La codificación de los mensajes de texto cortos enviados y recibidos por los teléfonos móviles están definidos en la recomendación 03. aun así este tipo de codificación es utilizada para el envío de datos (datos binarios como ring tones. De 70 caracteres de largo escritos con un conjunto de caracteres de 16 bits unicode (UCS2). mensajes inteligentes. ^{}[]\~) y son formados por dos caracteres cuando son enviados en formato de 7 bits.

Maestría en Informática Aplicada en Redes depende de la capacidad que el móvil receptor tiene para desplegar los caracteres unicode UCS2. Revisando el conjunto de caracteres de la tabla E. se observa que prácticamente se encuentran todos los caracteres necesarios como para escribir correctamente cualquier comando del sistema operativo Windows y Linux con lo que no seria necesario que el móvil del operador o el instalado como parte del sistema WDS tenga características sobre un conjunto de caracteres extendidos y el sistema soportaría como máximo longitudes de mensajes de hasta 160 caracteres. Tabla E1.Conjunto de caracteres GSM 7-Bit Gsm 7-bit decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Character name Commercial at Pound sign Dollar sign Yen sign Latin small letter e with grave Latin small letter e with acute Latin small letter u with grave Latin small letter i with grave Latin small letter o with grave Latin capital letter c with cedilla Line feed Latin capital letter o with stroke Latin small letter o with stroke Carriage return Latin capital letter a with ring above Latin small letter a with ring above Greek capital letter delta Low line Greek capital letter phi Greek capital letter gamma Greek capital letter lambda Greek capital letter omega Greek capital letter pi Greek capital letter psi Greek capital letter sigma Å Å Δ _ Φ Γ Λ Ω Π Ψ Σ Ø Ø Character @ £ $ ¥ È É Ù Ì Ò Ç Iso-8859-1 decimal 64 163 36 165 232 233 249 236 242 199 10 216 248 13 197 229 916 95 934 915 923 937 928 936 931 Página 79 de 82 .1.

. / 0 1 2 3 ^ { } \ [ ~ ] | € Æ Æ ß É 12 94 123 125 92 91 126 93 124 164 (iso-8859-15) 8364 (ansi) 198 230 223 201 32 33 34 35 164 (iso-8859-1) 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 Θ Ξ 920 926 Página 80 de 82 .Maestría en Informática Aplicada en Redes 25 26 27 27 10 27 20 27 40 27 41 27 47 27 60 27 61 27 62 27 64 27 101 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 Greek capital letter theta Greek capital letter xi Escape to extension table Form feed Circumflex accent Left curly bracket Right curly bracket Reverse solidus (backslash) Left square bracket Tilde Right square bracket Vertical bar Euro sign Latin capital letter ae Latin small letter ae Latin small letter sharp s (german) Latin capital letter e with acute Space Exclamation mark Quotation mark Number sign Currency sign Percent sign Ampersand Apostrophe Left parenthesis Right parenthesis Asterisk Plus sign Comma Hyphen-minus Full stop Solidus (slash) Digit zero Digit one Digit two Digit three ! " # ¤ % & ' ( ) * + .

< = > ? ¡ A B C D E F G H I J K L M N O P Q R S T U V W X Y 52 53 54 55 56 57 58 59 60 61 62 63 161 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 Página 81 de 82 .Maestría en Informática Aplicada en Redes 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 Digit four Digit five Digit six Digit seven Digit eight Digit nine Colon Semicolon Less-than sign Equals sign Greater-than sign Question mark Inverted exclamation mark Latin capital letter a Latin capital letter b Latin capital letter c Latin capital letter d Latin capital letter e Latin capital letter f Latin capital letter g Latin capital letter h Latin capital letter i Latin capital letter j Latin capital letter k Latin capital letter l Latin capital letter m Latin capital letter n Latin capital letter o Latin capital letter p Latin capital letter q Latin capital letter r Latin capital letter s Latin capital letter t Latin capital letter u Latin capital letter v Latin capital letter w Latin capital letter x Latin capital letter y 4 5 6 7 8 9 : .

Maestría en Informática Aplicada en Redes 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Latin capital letter z Latin capital letter a with diaeresis Latin capital letter o with diaeresis Latin capital letter n with tilde Latin capital letter u with diaeresis Section sign Inverted question mark Latin small letter a Latin small letter b Latin small letter c Latin small letter d Latin small letter e Latin small letter f Latin small letter g Latin small letter h Latin small letter i Latin small letter j Latin small letter k Latin small letter l Latin small letter m Latin small letter n Latin small letter o Latin small letter p Latin small letter q Latin small letter r Latin small letter s Latin small letter t Latin small letter u Latin small letter v Latin small letter w Latin small letter x Latin small letter y Latin small letter z Latin small letter a with diaeresis Latin small letter o with diaeresis Latin small letter n with tilde Latin small letter u with diaeresis Latin small letter a with grave Z Ä Ö Ñ Ü § ¿ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Ä Ö Ñ Ü À 90 196 214 209 220 167 191 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 228 246 241 252 224 Página 82 de 82 .