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

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

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

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

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

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

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

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

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. inboxpath Donde los mensajes SMS recibidos son almacenados.Maestría en Informática Aplicada en Redes Campo Coding ssion'. No asignado . por defecto el directorio actual. Página 15 de 82 . 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. 'Default_Compression'. '8bit'. 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.SMS ID ¿Qué instancia de SMSD envió esta única secuencia. Tipo enum('Default_No_Compre 'Unicode_No_Compression' .

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

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

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

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

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

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

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

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

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

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

desde una especificación de modelo descrita en XMI. filtrado y modelos. un sistema de reporteo Código abierto basado en Eclipse para aplicaciones Web.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. SQL. CSS. JavaScript. XSD y WSDL. Página 26 de 82 . JSP. Esta compuesta de: Editores de fuentes para HTML. Editores gráficos para XSD y WSDL. • Proyecto de herramientas para inteligencia empresarial y generación de reportes (BIRT). • Plataforma de Editor Gráfico (GEF) permite a los desarrolladores tomar el modelo de una aplicación existente y fácilmente crear un editor de gráficos ricos. proyectos de naturaleza Java EE. • UML2 una implementación de UML 2. constructores y modelos y un navegador de Java EE. • 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. DTD. herramientas para acceso a base de datos. • 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.0 metamodel para la plataforma Eclipse diseñada para soportar el desarrollo de herramientas de modelado. un explorador y asistente para servicios Web y una herramienta de pruebas WS-I. XML. y herramientas para manejo de servidores de pruebas unitarias. • Plataforma de comunicaciones de Eclipse Communication Framework (ECF) habilita la creación de aplicaciones de comunicaciones en la plataforma de Eclipse.

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

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

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

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

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

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

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

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

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.2 Características de fallo en servicios en servidores Fallo imprevisto en horas no laborales Todo servidor tiene riesgo en fallo en sus servicios Si el fallo es detectado. La interrupción del servicio persiste hasta que el administrador está presencialmente El servidor no tiene un sistema de monitoreo El servidor está monitoreado pero no tiene forma de comunicarse con el exterior El administrador es advertido del fallo del servicio pero no tiene acceso a al servidor El Administrador no puede tener forma de aplicar comandos al servidor. el servicio permanece interrumpido. 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.3.3.

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

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

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

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

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

se presente un esquema completo de la solución y seguidamente se realiza el diagrama de secuencia. Esto será la tarea que realizará un demonio del presente proyecto WDS. el mensaje deberá ser transformado a comando. Página 41 de 82 .3 Diagrama de nivel 2 En este diagrama se visualiza la solución completa. 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.Maestría en Informática Aplicada en Redes En la base de datos. que es parte del núcleo del presente proyecto WDS. un programa en java. hará la ejecución del comando a nivel del sistema operativo. En primera instancia. llamado i2ic. 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. con todos los detalles. a fin de visualizar la interacción de todos los componentes.

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

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

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

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

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

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

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

number3 = 503.............. observe que en este. se encuentran las secciones de configuración de GAMMU con la funcionalidad smsd activada.. [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. [smsd] PIN = 0000 logfile = smsdlog commtimeout = 1 sendtimeout = 10 #--------------------------. password = . la modificación del contenido del archivo smsdrc es la que se muestra líneas abajo.../. pc = localhost database = smsd Página 49 de 82 . # Así mismo puede descomentar la siguiente sección y agregar números de teléfonos en # esta para denegar todos los mensajes recibidos por GAMMU desde teléfonos indeseables..so..smsd & MySQL configuration user = ..Maestría en Informática Aplicada en Redes # ... number2 = 503.. #[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. /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./smsdrc Para este caso en el que se utiliza el móvil Siemmens S55.conf # /sbin/ldconfig Modificar el archivo wds-project/smsdrc de acuerdo a sus requerimientos # vi ..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

00 por mes para un administrador de servidor Web (Web master). Ahorros por el nuevo sistema Costo de Personal 1 administrador Web 7/24 nocturno Ahorro por Mes Costo $1.00 $5. Análisis Costo-Beneficio El esquema de costro beneficio para este Framework desarrollado puede ser calculado de acuerdo a cada caso. es el recurso humano de planta.00 $955.00 B.500. pero en general se pueden tomar los siguientes costos estimados para una inversión inicial B. pero se considera un promedio. que se ahorrará. pues este podrá controlar el servidor de manera remota. 1. el cual podrá variar entre empresas. Se ha tomando como base un salario de $1500.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.500.7 GHz Costo de infraestructura Mobiliario para el servidor 1 licencia SUSE Linux 1 teléfono celular para Server 1 chip Total Costo $800. Es 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. 40G HD.1 Costo de inversión inicial Inversión para el nuevo sistema Costo del equipo (PC) Linux 512M Ram.00 $100. al menos uno que aplicará en todos los casos. • Carga de la batería.00 Página 74 de 82 .00 $0.2 Beneficios A pesar que los ahorros pueden derivarse de una gran cantidad de aspectos.00 $1.00 $50.

450.40 B.60 $50.449.449.449.60 $50.40 1500 -$1.Maestría en Informática Aplicada en Redes B.60 $50. Página 75 de 82 .449.40 1500 -$1.60 $50. Anexo C.40 1500 -$1.60 $50.60 $50. a una tasa de $0.40 1500 -$1.40 1500 -$1.40 1500 -$1.60 -$16.449.449.60 Se concluye que la operación con el sistema WDS tiene una recuperación de la inversión inmediata.40 1500 -$1.60 $50.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.00 1500 -$505.449.40 1500 -$1.449.449.60 $50.40 1500 -$1. asumiendo celulares con diferente proveedor. Contingencia de la solución En relación a contingencias.449.00 $50. lo cual permitiría superar una eventual falla en el equipo o de la red telefónica de un proveedor.449.40 1500 -$1.06 da como resultado un costo mensual de $50. se establecen las siguientes consideraciones: • Redundancia con celulares: Puede instalarse más de un teléfono celular. 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.3 Costo de operación mensual En cada uno de los meses habrá que estimar el volumen de mensajes a enviar y recibir desde el sistema WDS.60 $50.

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful