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

La aplicación que se le da a WDS para este caso fue. es tal que. Página 5 de 82 . los ignora. independientemente del lugar en que este se encuentre. de tal manera que este puede perfectamente iniciar. así como aquellos teléfonos que deseamos deben ser excluidos para recibir mensajes SMS. la administración remota de servidores. manejándolo como un ‘error’. pero puede ser adaptado para el control remoto de otros procesos. ya que posee dentro de sus parámetros configurables el listado de teléfonos admitidos. Además la estructura que debe poseer el mensaje a ser enviado por el administrador. ya que no necesita conectividad a Internet. WDS es un proyecto que brinda comunicación entre el administrador y el servidor. WDS ejecutara aquellos mensajes que poseen dicha estructura y si no. • En términos de costos económicos.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. inversión en infraestructura de comunicaciones y además ahorra los costos en recurso humano. 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. es una solución que ofrece grandes ventajas.

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. 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 . para lograr la administración remota de uno o mas equipos servidores. por medio de un teléfono celular. Aprovechar las ventajas que brindan las comunicaciones inalámbricas como son la movilidad.

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

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

Número de teléfono (decodificado) del destinatario del mensaje enum('Default_No_Compres Tipo de codificación del mensaje de texto. etc. Campo UpdatedInDB InsertIntoDB Timestamp Timestamp Tipo Descripción Fecha y hora en que se da una actualización del usuario. SendingDateTime Timestamp Página 12 de 82 . '8bit'. Cuando buscamos forzar el envío después de un tiempo planificado. Fecha y hora fijada en el momento de un Insert Campo en el que se fija algún valor. 'Unicode_Compression') UDH Class Text Int(11) Cabecera de datos del usuario codificado usando valores hexadecimales. demonio.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'. 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. 'Default_Compression'. 'true') Mensaje de texto (SMS) decodificado. Text DestinationNumb er Coding sion'. 'Unicode_No_Compression'. Clase SMS or -1 Texto Varchar(20) Mensaje de texto codificado usando valores Hexadecimales. Tabla Outbox Tabla para un mensaje SMS (o el primer mensaje de una secuencia) esperando para ser enviado.

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

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

'Default_Compression'.SMS ID ¿Qué instancia de SMSD envió esta única secuencia. 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. Página 15 de 82 . Tipo enum('Default_No_Compre 'Unicode_No_Compression' .Maestría en Informática Aplicada en Redes Campo Coding ssion'. '8bit'. por defecto el directorio actual. inboxpath Donde los mensajes SMS recibidos son almacenados. No asignado . 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. Numero decodificado de la central de servicio de mensajes cortos Clase SMS ó -1 Texto SMS en forma legible al humano. 'Unicode_Compression') Descripción Texto codificado SMS.

'standard' es el juego de caracteres estándar. por defecto outboxpath(= deleted) errorsmspath Donde los mensajes SMS con error en la transmisión sentsmspath. 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.4 MySql MySQL. 'unicode'. Por defecto: unicode. están ubicados. MySQL AB es una compañía comercial. sentsmspath Donde los mensajes SMS transmitidos son ubicados. transmitformat El formato para transmitir el SMS: 'auto'.'unicode'. 'standard'. por defecto el directorio actual. lo desarrolla. El formato 'detail' es el formato utilizado por backup. distribuye y soporta MySQL AB. Página 16 de 82 . por defecto inboxformat El formato en que el mensaje SMS será almacenado: ‘detail’.Maestría en Informática Aplicada en Redes outboxpath Donde los mensajes SMS a ser enviados deberían ser ubicados. 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. el sistema de gestión de bases de datos SQL Open Source más popular. fundada por los desarrolladores de MySQL. '7bit'.

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

En el tiempo de ejecución. Su conectividad. Las aplicaciones Java están típicamente compiladas en un bytecode. aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible. herramientas administrativas y un amplio abanico de interfaces de programación para aplicaciones (APIs). velocidad.Maestría en Informática Aplicada en Redes • El servidor de base de datos MySQL es muy rápido. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++. • Una gran cantidad de software de contribuciones está disponible para MySQL. 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. fiable y fácil de usar. el bytecode es normalmente interpretado o compilado a código nativo para la ejecución. El servidor MySQL también tiene una serie de características prácticas desarrolladas en cooperación con los usuarios. aunque la compilación en código máquina nativo también es posible. 1. MySQL Server ofrece hoy en día una gran cantidad de funciones. 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. un lenguaje interpretado. es decir muchas aplicaciones soportan el servidor de base de datos de MySQL. JavaScript. programas y bibliotecas cliente. pero no está directamente relacionado con Java. Página 18 de 82 . pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel como punteros. 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.

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

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

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

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

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

aplicaciones web. definición y manipulación de modelos de software. 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. etc. 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. hacen uso de su interfaz gráfica personalizable y profesional. interfaces gráficas para el usuario (GUI). además de poder ser usados conjuntamente con otros plugins. Esto permite técnicas avanzadas de refactorización y análisis de código. GEF (Graphic Editing Framework . • El SDK de Eclipse incluye las herramientas de desarrollo de Java. Por ejemplo.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. 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. interfaces gráficas para el usuario (GUI). permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. El SDK de Eclipse incluye las herramientas de desarrollo de Java. El IDE también hace uso de un espacio de trabajo. hacen uso de su interfaz gráfica que puede ser personalizada y profesional. 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 . Dado que los editores realizados con GEF "viven" dentro de eclipse. además de poder ser usados conjuntamente con otros plugins. etc. en este caso un grupo de metadata en un espacio para archivos plano. etc.

vía Hibernate Tools. Algunos proyectos se mencionan a continuación. Proyectos Eclipse Eclipse esta compuesto de muchos proyectos diferentes. Plataforma Eclipse de Cliente Enriquecido (RCP) y las herramientas de desarrollo de Java (JDT). Integración con Hibernate. vía Subclipse. profilers y aplicaciones Benchmark. • • • • • • 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. tests.Maestría en Informática Aplicada en Redes de metadata en un espacio para archivos plano. Página 25 de 82 . • El proyecto Eclipse per se que incluye la Plataforma Eclipse. • 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. clases. como son Depuradores. a través de "plugins" libremente disponibles es posible añadir: • • Control de versiones con Subversion. permitiendo modificaciones externas a los archivos en tanto se refresque el espacio de trabajo correspondiente. Refactorización Asimismo. etc.

constructores y modelos y un navegador de Java EE. CSS. • Plataforma de comunicaciones de Eclipse Communication Framework (ECF) habilita la creación de aplicaciones de comunicaciones en la plataforma de Eclipse. filtrado y modelos. DTD. • Herramientas de Modelado Generativo (GMT) un grupo de herramientas para modelado por ejemplo para ejecutar transformaciones de modelo QVT. especialmente aquellas basadas en Java EE. • 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. JSP. Esta compuesta de: Editores de fuentes para HTML. Página 26 de 82 . proyectos de naturaleza Java EE. desde una especificación de modelo descrita en XMI. y herramientas para manejo de servidores de pruebas unitarias. un explorador y asistente para servicios Web y una herramienta de pruebas WS-I. JavaScript. • UML2 una implementación de UML 2. • Proyecto de herramientas para inteligencia empresarial y generación de reportes (BIRT). herramientas para acceso a base de datos. XSD y WSDL.0 metamodel para la plataforma Eclipse diseñada para soportar el desarrollo de herramientas de modelado. un sistema de reporteo Código abierto basado en Eclipse para aplicaciones Web. XML. Editores gráficos para XSD y WSDL. • 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. SQL.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.

Proyectos IDE en Lenguajes • • AspectJ es una extensión del lenguaje Java orientado a aspectos. soportando el desarrollo de cualquier aplicación Java. Página 27 de 82 . eRCP es en general un grupo de componentes que son subgrupos de los componentes RCP. 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. 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. basadas en estándares que habilita la integración de herramientas específicamente desarrolladas para computadoras con arquitectura paralela. • 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. • Herramientas de Desarrollo de Java (JDT) provee las herramientas que implementan un IDE de Java. escalables. incluyendo los plug-ins de 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. • Subproyecto IDE de COBOL para Eclipse (COBOL) construye un Ambiente Integrado de Desarrollo (IDE) completamente funcional para COBOL en la plataforma Eclipse.

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

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

Si se quiere que hibernate asigne las claves se pueden utilizar las claves uuid.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. otros lenguajes de programación (Java.string. PERL es útil en la resolución de cualquier tarea y posee habilidades para integrarse con sistemas operativos. protocolos.hex y uuid. PERL combina en forma concisa las mejores características de lenguajes como C. C. bases de datos. es posible reducir extensos programas escritos en C a pocas líneas de código de un programa PERL. En general. awk y sh.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. etc. con la ventaja adicional de que corren sin cambio sobre casi cualquier plataforma existente. La etiquete Id tiene que ver con el mapeo de la clave primaria de la tabla. pero se le debe indicar como). Durante los últimos años la popularidad del lenguaje alcanzó niveles insospechados a raíz de su utilización generalizada en soluciones Web. en este caso se a fijado como “asignado”. El atributo type es opcional (Hibernate utilizará reflection para conjeturar el tipo para el caso en que no se le indique) 1. del tipo que se desee. ). etc. 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 etiqueta del generador le dice a hibernate como debe producir la clave primaria (Hibernate genera una. sed. Su versatilidad y eficiencia en el manejo de texto Página 30 de 82 . ambientes gráficos. Junto con las facilidades para el desarrollo de aplicaciones Web. 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. lo que convierte a PERL en el lenguaje ideal para desarrollo de prototipos y aplicaciones robustas 100% portables. redes.

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

se plantea el problema usando la técnica de la caja negra. • Múltiples Administradores de servidores Página 32 de 82 . Cuando dichos servicios tienen cobertura 7/24 estos se elevan aun más. ya que las fallas pueden darse a cualquier hora del día y cualquier día del año. se analizan las características del problema y finalmente se establecen las características de la solución. 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”. el responsable deberá solucionarlo presencialmente. con el propósito de que estos se mantengan operando de forma constante. de tal forma que si un servicio tiene algún problema. por lo que hay uno o varios administradores responsables del buen funcionamiento de dichos servidores.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. en términos económicos para la empresa. El soporte se vuelve un problema para el especialista responsable de los servidores.Maestría en Informática Aplicada en Redes II. 2. se analiza la situación actual. • Soporte de servidor 7/24 Los costos de operación de los servidores por lo general son altos. Una vez planteado. Análisis del problema En este apartado del proyecto.

por tener seguramente contrato de servicios redundantes de Internet. teniendo que contratarse un administrador por cada servidor. • 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. con aplicaciones tales como X. el administrador podría saber cual es el problema. uno más para administrador de dominio. 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. Regularmente los servidores de producción no se pondrían Página 33 de 82 . otro para administración de servidores Web y así conforme los servicios que se brinden. Este recurso permite a empresas que tienen sus servidores con una IP pública. otro para el correo electrónico. redundan en la paralización de su actividad empresarial. • Sistemas de control remoto por acceso desde PC e Internet Existen formas de tomar control remoto de servidores. lo primero. Por ejemplo si un servidor MySql falla. • Sistemas de monitoreo sin control remoto Existen algunas aplicaciones Web desde las cuales se pueden realizar monitoreo de servicios.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. Por ejemplo un administrador para la base de datos. poder tomar control remoto desde otra computadora distante. baja productividad e inclusive problemas con clientes que a la larga. ya que esto les podría causar retraso. pero no podrá levantar remotamente dicho servicio y comprobar posteriormente su estado. Lo anterior nos lleva a decir que no se logra una comunicación interactiva con el servidor de manera remota. pero dichas aplicaciones se quedan simplemente en el diagnostico de la falla. y este tipo de contratación no es factible para muchas empresas. y lo segundo porque sus servidores de producción estarían expuestos públicamente al Internet.

Una gran desventaja de este modelo a parte de lo económico y la seguridad es que el control debe realizarse desde una PC. es decir. • 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.2 Planteamiento del problema A continuación se presenta el planteamiento del problema. lo cual no es como un teléfono celular el cual anda en su bolsillo.Maestría en Informática Aplicada en Redes bajo este riesgo. 2. a través del método de la caja negra. se analizan preliminarmente en el siguiente cuadro: Página 34 de 82 . poder ir extendiendo los servicios a los cuales se les pueda dar soporte. Servidor sin control remoto Sistema WDS Servidor controlado remotamente Los elementos involucrados en la caja negra anterior. 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.

3.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.1 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 Características del problema: A continuación se listan las principales características del problema: 2. el servicio permanece interrumpido. 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.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.3.

3 2. El proceso detenido en el Server.3. En muchos casos la ubicación geográfica del servidor se encuentra en zonas de difícil acceso o de alta peligrosidad. La interrupción de servicios ocasiona baja productividad.6 - No se cuenta en la mayoría de empresas Muchas compañías con servicios críticos como hospitales. El administrador tiene celular. 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. 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. respaldado y se deberán tomar todas las medidas para mitigar riesgos. no es rentable.3. es crítico para el cliente del proceso.5 2. el Server deberá ser asegurado. policía.Maestría en Informática Aplicada en Redes 2. 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. 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.3. fábricas operan las 24 horas El administrador de turno no se encuentra disponible El proceso que se ha detenido.4 2.3. Pueden haber diversos administradores. lo cual Página 36 de 82 . detiene muchos recursos a su vez (efecto cascada). mal imagen y esto se traduce en menores ingresos.

control y otras que deberán presupuestarse. 2. Deberá vencer el problema de depender de una PC para operar un servidor. se prefiere que el control se haga desde un dispositivo móvil. es decir lanzarle comandos y recibir respuestas del servidor. No deberá hacer depender a una empresa de contratar un ISP de Internet.Maestría en Informática Aplicada en Redes implica tareas de monitoreo.4 Características de la solución. La solución que se busca. 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. 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. Página 37 de 82 . No hay una forma sencilla y segura para tomarlo desde cualquier ubicación e interactuar con el. es decir debe ser capaz de acceder al servidor en cualquier día y hora. Deberá permitir controlar diversos servicios e inclusive diversas máquinas (PC o Servidores). Deberá ser una solución de bajo presupuesto y de preferencia usando software libre. Deberá vencer las barreras de Seguridad. Deberá permitir soporte 7/24.

pero en la cual se puedan ver sus componentes internos.Maestría en Informática Aplicada en Redes III. 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. Ordenes o comandos Página 38 de 82 .1 Diagrama de contexto (Nivel 0) Desde la perspectiva del usuario final (administrador(es) del servidor). Propuesta de solución En este capítulo se presenta la solución propuesta. 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 1: Diagrama en el que la propuesta de solución es aproximada como una solución siempre de alto nivel. así como también la justificación del tipo de elección. 3. • Diagrama de nivel 2: Diagrama completo con todos los componentes de la solución propuesta.

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 . Enviar comandos al equipo servidor. lo cual simula un control remoto del servidor. El caso de uso puede verse en la siguiente figura. vía mensaje de texto.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. El administrador y el sistema WDS. podrá realizar las siguientes actividades: • • Realizar el monitoreo de algún servicio. 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. El procedimiento es bastante simple y consiste de los siguientes pasos: • • • Administrador.

bluetooth. Ordenes o comandos El celular que recibe el mensaje. estará conectado al Server. El mensaje será trasladado a una base de mySql. a través de un demonio denominado smsd.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. por USB. Página 40 de 82 .2 Diagrama de nivel 1 El mensaje es recibido en el servidor. Dicho demonio es parte del proyecto Gammu. quien reciba el mensaje. Para esto será necesario tener otro celular. puerto infrarrojo u otros medios.

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

El comando encontrado está compuesto de dos elementos: archivo y ruta. debidamente identificado con su script asociado.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. la aplicación Java. es conocido ahora como InboxCommand. 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. El Mensaje es tomado por el demonio smsd el cual lo almacenara dentro de la estructura de base de datos. 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. Una vez el InboxCommand recibe un comando. El mensaje. Dicho mensaje es recibido en el celular que controla al servidor. por medio del motor de Página 42 de 82 . toma el objeto InboxCommand.

Maestría en Informática Aplicada en Redes persistencia llamado HIBERNATE.1 Gammu. por medio del celular conectado al servidor.4 Software a utilizar: 3. en forma de SMS. Este es gratuito y es podría decirse que es el punto de partida del presente proyecto WDS. ejecutarlo en el sistema Página 43 de 82 . Originalmente se había seleccionado el proyecto GNOKI el cual permite el control del envío y recepción de mensajes. el cual va hacia el cliente.4. El presente proyecto WDS. La secuencia en la que el diagrama anterior realiza la interacción con todos los componentes. ejecuta el comando y finalmente convirtiéndolo en un objeto de salida (Outbox). interpretar el comando. que permite la recepción y envío de mensajes SMS utilizando una base de datos mySql. Este proyecto de código abierto en lenguaje C ANSI. tendrá que realizar todos los mecanismos para elevar el mensaje a la categoría de comando. sin embargo la parte de la base de datos no la incluye. 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.

4 Perl.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 Java.4. En general. El lenguaje fue diseñado con las siguientes características en mente: Simple. lo que convierte a PERL en el lenguaje ideal para desarrollo de prototipos y aplicaciones robustas 100% portables. Este lenguaje combina en forma concisa las mejores características de lenguajes como C. portable. así como evitar conexiones con JDBC. etc. 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.4. sed. robusto. de manera de programar ciento por ciento orientado a objetos. awk y sh. Hibernate se encarga del mapeo de clases a sus correspondientes tablas de base de datos. Es la más flexible y poderosa solución en el mercado de motores de persistencia.2 Hibernate. familiar. Página 44 de 82 .4. con la ventaja adicional de que corren sin cambio sobre casi cualquier plataforma existente. 3. es decir un servicio de alto rendimiento objeto/relacional. 3. Es un motor de persistencia. seguro. El programa de Java puede ejecutarse en cualquier máquina o plataforma. es posible reducir extensos programas escritos en C a pocas líneas de código de un programa PERL. 3.

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

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

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

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

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..Maestría en Informática Aplicada en Redes # ..so./. #[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 . number2 = 503..../smsdrc Para este caso en el que se utiliza el móvil Siemmens S55....... # 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. [smsd] PIN = 0000 logfile = smsdlog commtimeout = 1 sendtimeout = 10 #--------------------------... observe que en este....smsd & MySQL configuration user = .conf # /sbin/ldconfig Modificar el archivo wds-project/smsdrc de acuerdo a sus requerimientos # vi .... /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. la modificación del contenido del archivo smsdrc es la que se muestra líneas abajo... se encuentran las secciones de configuración de GAMMU con la funcionalidad smsd activada.. password = ..

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

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

jar:$prj/lib/connector. $dbh->disconnect.Cliente es ejecutada pasándole como argumento el identificador del comando a procesar. $db_password.1.maestria.1.jar:$prj/lib/commons-collections2.pl como su única capa de Página 52 de 82 .jar:$prj/lib/ehcache-1.Maestría en Informática Aplicada en Redes return @result. } El objetivo principal de este daemon es convertir los mensajes recibidos en la tabla inbox a registros de comandos en la tabla inboxCommand.2.negocio.jar:$prj/lib/commons-logging-1.8-bin.jar:$prj/lib/cglib-2.maestria.4.jar:$prj/lib/jgroups-2.jar:$prj/lib/dom4j1.dir`. my $dbh = DBI->connect($dsn.jar:$prj/lib/asm.ufg.1.:$prj/lib/hibernate3. para realizar esto. $db_user_name.3.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/antlr2.jar:$prj/lib/jta.1.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/jaas. AutoCommit => 0 }).1.negocio.9.1.edu.Cliente $1 En este script se puede observar que se definen variables de entorno y luego la clase sv.3.3.jar:$prj/lib/asm-attrs.jar:$prj/lib/mysql-connector-java-3.11.jar:$prj/lib/oscache-2.ufg.jar:$prj/lib/concurrent-1.2. también se observa que la capa de negocio de la aplicación java interactúa con el daemon i2ic.edu.0.6.2. pasando a este aplicativo como argumento el identificador del nuevo comando insertado en la tabla inboxCommand que es el comando que se deberá procesar.0.jar:$prj/lib/swarmcache-1. 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. El código fuente del archivo ejecutable clientStart.jar:$prj/lib/jdbc2_0-stdext.6.jar:$prj/lib/jboss-common. { RaiseError => 1.wds.wds.jar:$prj/lib/proxool-0. $dbh->do($sql).jar:$prj/lib/jbossjmx.0rc2.'/WDS' export prj # CLASSPATH define las librerias necesarias por el aplicativo WDS # CLASSPATH=.8.jar:$prj/lib/log4j1.jar:$prj/lib/c3p0-0.8.sh. } sub myDo { my $sql = @_[0].jar:$prj/lib/jboss-system.2.7.jar:$prj/lib/jboss-cache.

'WDS/scripts'. `ScriptLocation` text. LOCK TABLES `daemons` WRITE.Table structure for table `command` DROP TABLE IF EXISTS `command`. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS.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. `Description` text.10.9 --. `ScriptName` text.NULL). /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE.10. SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */.NULL). CREATE TABLE `daemons` ( `Start` text NOT NULL.Table structure for table `daemons` DROP TABLE IF EXISTS `daemons`.'0'. FOREIGN_KEY_CHECKS=0 */.10.(3. PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1.'Error'. --. CREATE TABLE `command` ( `Id` int(11) NOT NULL auto_increment. -.'WDS/scripts'. /*!40000 ALTER TABLE `command` ENABLE KEYS */. SQL_NOTES=0 */.Dumping data for table `daemons` /*!40000 ALTER TABLE `daemons` DISABLE KEYS */.12 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */. UNIQUE_CHECKS=0 */. UNLOCK TABLES. /*!40101 SET NAMES utf8 */.Host: localhost Database: smsd -. -.Dumping data for table `command` /*!40000 ALTER TABLE `command` DISABLE KEYS */.------------------------------------------------------. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS.MySQL dump 10. Los objetos de la base de datos MySQL para el esquema smsd son creados a partir del siguiente archivo script: -.'Saludo'. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES.(2.Server version 4.NULL).1. `Info` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */.'2'. -. LOCK TABLES `command` WRITE. /*!40000 ALTER TABLE `daemons` ENABLE KEYS */. `MaxSecondsTime` int(11) default NULL.'WDS/scripts'. -. INSERT INTO `command` (1.'1'.'Ping'.Table structure for table `gammu` DROP TABLE IF EXISTS `gammu`. CREATE TABLE `gammu` ( VALUES Página 53 de 82 . `Code` varchar(45) NOT NULL default ''. UNLOCK TABLES.

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

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

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

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.maestria. en la siguiente figura se muestra el diagrama UML de esta aplicación. y que son los objetos que las clases en los paquetes de datos y negocio mueven a través de la aplicación. se realiza por medio de la clase sv.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.ufg.wds. como podrá observarse la estructuración de esta aplicación se ha desarrollado haciendo uso del modelo de programación en capas. El procesamiento de los comandos.sh). Página 57 de 82 .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. 4.edu.negocio.Cliente.

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

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

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

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

Página 62 de 82 .ufg.Maestría en Informática Aplicada en Redes public Timestamp getSendingTimeOut() { return sendingTimeOut.wds.*. } public void setUpdatedInDb(Timestamp updatedInDb) { this. } public void setSendingTimeOut(Timestamp sendingTimeOut) { this. } public void setUdh(String udh) { this. } public void setCLASS(int class1) { CLASS = class1. import sv.dominio. } public void setText(String text) { this.textDecoded = textDecoded.sendingTimeOut = sendingTimeOut.wds.edu.edu. en esta se implementan funcionalidades como leer y actualizar objetos.DAOInboxCommand y DAOOutbox es mostrado a continuación: package sv.datos.wds.maestria. } } 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 String getText() { return text.text = text. } public void setTextDecoded(String textDecoded) { this. } public Timestamp getUpdatedInDb() { return updatedInDb. } public int getCLASS() { return CLASS.ufg.maestria. El código fuente de las clases sv.edu.udh = udh.updatedInDb = updatedInDb.ufg. } public String getTextDecoded() { return textDecoded. } public String getUdh() { return udh.maestria.

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

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

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

maestria.0//EN" "http://hibernate.hbm.0.wds.sourceforge.dtd"> <hibernate-mapping> <class name="sv.ufg.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.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.dominio.edu.net/hibernate-mapping-3.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 .

• SW del proyecto WDS: CD de instalación* o Instalador o Hibernate: 3.Maestría en Informática Aplicada en Redes V. en promedio 512MB. 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. RAM requerida la mínima demandada por el sistema operativo. En esta prueba se enviará un mensaje de texto con el contenido siguiente :1 como se muestra en la imagen.0** * Incluidos en el CD de este proyecto. Prototipo y resultados alcanzados En este capítulo se encuentran los pasos necesarios para usar el prototipo funcional desarrollado en este proyecto.0** o Proyecto Gammu:1. A continuación se detallan los pasos a seguir para experimentar con el prototipo: Experimento 1: Prueba de instalación. además se presentan los resultados de las pruebas realizadas.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. Disco duro 200MB o superior. Página 67 de 82 .

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

Dado que este comando no existe.Maestría en Informática Aplicada en Redes Código :0 :1 :2 Nombre Script Error. se debe verificar que el servicio Web está detenido. con el mensaje :wwwStop Una vez recibido el mensaje de respuesta desde el servidor. ‘/root/WDS/scripts’. por medio del sql siguiente Insert into command values (’apache_stop’. 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. en este caso.d/apache2 stop | grep done Para ingresar el comando al sistema WDS se insertará un renglón en la tabla Command. Primero se creará un script en algún lenguaje de programación. Página 69 de 82 . 10.sh Saludo. dándose por finalizada con éxito la presente prueba. bash. se enviará un mensaje al celular colocado en el servidor.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. habrá que crearlo. ‘webStop’) Desde el celular del administrador físico.sh Ping.

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

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

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

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

2 Beneficios A pesar que los ahorros pueden derivarse de una gran cantidad de aspectos.00 $50. pues este podrá controlar el servidor de manera remota.00 $100. • Carga de la batería.500.1 Costo de inversión inicial Inversión para el nuevo sistema Costo del equipo (PC) Linux 512M Ram.00 $5. es el recurso humano de planta.00 $0. 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.00 $955. al menos uno que aplicará en todos los casos.500.00 B.7 GHz Costo de infraestructura Mobiliario para el servidor 1 licencia SUSE Linux 1 teléfono celular para Server 1 chip Total Costo $800. Análisis Costo-Beneficio El esquema de costro beneficio para este Framework desarrollado puede ser calculado de acuerdo a cada caso. Ahorros por el nuevo sistema Costo de Personal 1 administrador Web 7/24 nocturno Ahorro por Mes Costo $1. que se ahorrará. pero se considera un promedio. el cual podrá variar entre empresas.00 por mes para un administrador de servidor Web (Web master). 1. 40G HD.00 Página 74 de 82 .00 $1.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. Se ha tomando como base un salario de $1500. pero en general se pueden tomar los siguientes costos estimados para una inversión inicial 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.60 $50.449.60 $50.60 -$16.449.60 Se concluye que la operación con el sistema WDS tiene una recuperación de la inversión inmediata. Página 75 de 82 .06 da como resultado un costo mensual de $50.00 $50.40 1500 -$1.40 1500 -$1.60 $50.449.449.40 1500 -$1.449.40 1500 -$1.449.60 $50.449.40 B.60 $50. Contingencia de la solución En relación a contingencias.60 $50. a una tasa de $0.450.40 1500 -$1. lo cual permitiría superar una eventual falla en el equipo o de la red telefónica de un proveedor.449.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.449. asumiendo celulares con diferente proveedor.40 1500 -$1.60 $50.00 1500 -$505.60 $50.40 1500 -$1. se establecen las siguientes consideraciones: • Redundancia con celulares: Puede instalarse más de un teléfono celular. Anexo C.40 1500 -$1. 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.60 $50.40 1500 -$1.60 $50.449.Maestría en Informática Aplicada en Redes B.449.40 1500 -$1.

Anexo D. 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. • Reporte de robo de terminal de administrador: En el evento de extravío o robo del celular del administrador físico. deberá modificar el archivo wds-project/smsdrc en la sección [exclude_numbers].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.

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. ^{}[]\~) y son formados por dos caracteres cuando son enviados en formato de 7 bits. la habilidad para desplegar este tipo de caracteres Página 78 de 82 . mensajes inteligentes.). De 140 caracteres de largo escritos con un conjunto de caracteres de 8 bits. aun así este tipo de codificación es utilizada para el envío de datos (datos binarios como ring tones. muchos teléfonos antiguos no pueden desplegar mensajes codificados en formato de 8 bits.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.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. observe en esta tabla que varios símbolos son de 14 bits de longitud (Ej. De 70 caracteres de largo escritos con un conjunto de caracteres de 16 bits unicode (UCS2).38 y 03. etc. configuración WAP. 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.1). numerales.

1. Tabla E1.Maestría en Informática Aplicada en Redes depende de la capacidad que el móvil receptor tiene para desplegar los caracteres unicode UCS2. 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. Revisando el conjunto de caracteres de la tabla E.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 .

.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 ! " # ¤ % & ' ( ) * + . / 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 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 : . < = > ? ¡ 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 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 .

Sign up to vote on this title
UsefulNot useful