Instalación y configuración de Computadores y Periféricos
Escuela Técnica de Ingeniería Informática de Gijón
3º Ingeniería Técnica en Informática de Sistemas

Aplicación para la extracción de información del sistema

Autor: Dae Sung Kim Park

Fecha: 22 de Mayo de 2006

1.- Objetivos

El objetivo de este trabajo consiste en desarrollar una aplicación que permita visualizar la información técnica de un equipo a través de internet. Para llevar a cabo la extracción de los datos, se propone la utilización de WMI (Windows Management Instrumentation) en entornos Windows o del sistema de ficheros /proc en entornos Linux.

2.- Especificación de requisitos

El desarrollo de la aplicación plantea las siguientes necesidades:

La tecnología con mejor adaptación a estas necesidades es .NET, por la variedad y la (relativa) facilidad de uso de las herramientas que proporciona para el desarrollo de sistemas distribuidos. También sería posible utilizar Java o PHP, pero el desarrollo con estas tecnologías resultaría más laborioso en este caso.

El equipo servidor estará provisto de un sistema operativo Windows XP Professional, con Internet Information Services (IIS) y el servidor de bases de datos SQL Server 2005. El servidor de bases de datos permitirá almacenar tanto la información de los equipos, como los datos de autenticación para el control de acceso. A su vez, el servidor IIS hospedará una página web ASP.NET desde la cual será posible registrar nuevos usuarios y visualizar la información recibida desde los clientes. Además, se desarrollará un Servicio Web con el fin de homogeneizar las comunicaciones entre diferentes máquinas y el equipo servidor.

La extracción de información se realizará sólo en entornos Windows, ya que el sistema de ficheros /proc de Linux contiene información muy escasa sin criterios lógicos de formato en los ficheros; es posible encontrar ficheros en binario y en texto plano, con una sintaxis muy variada e inconsistente. No obstante, en caso de que surgiera alguna técnica para extraer suficiente información de un sistema Linux, sería posible desarrollar la aplicación correspondiente y enviar los datos al servidor aprovechando las implementaciones de Servicios Web de Mono o de Java, entre otros.

La herramienta de desarrollo utilizada será Microsoft Visual Studio 2005, que es posible obtener de forma gratuita a través del Academic Alliance de Microsoft o utilizando las versiones Express con licencia ilimitada.

3.- Teoría básica

La teoría necesaria para comprender en profundidad el resto del documento es demasiado extensa para presentarla con detalle en esta sección, por lo que sólo se describen las características principales de las tecnologías utilizadas. Se da por consabida la instalación y configuración de los servidores IIS y SQL Server por ser materia de otras asignaturas de la carrera de Ingeniería Técnica en Informática. Se puede encontrar más información en los sitios web de Microsoft Developer Network, MSDN (ver la sección de enlaces).

3.1.- Common Language Infrasctructure

El CLI (Common Language Infrastructure) proporciona un entorno de ejecución de código interpretado con el que es posible el desarrollo de aplicaciones multilenguaje y multiplataforma. Se encuentra especificado en el estándar Ecma-335. Por otro lado, en el estándar Ecma-334 se especifica el lenguaje C#, cuya sintaxis ofrece una traducción casi inmediata al Lenguaje Intermedio Común (Common Intermediate Language; CIL) interpretado por el CLI. Existen además numerosos compiladores que permiten generar Lenguaje Intermedio a partir de otros lenguajes como Java, C++ o Python.

La implementación del CLI de Microsoft es el Common Language Runtime o CLR, incluido en el .NET Framework.

3.2.- Servicios Web

Un Servicio Web es cualquier servicio disponible a través de Internet que utiliza un sistema de mensajería XML estandarizado como SOAP, HTTP o XML-RPC. Los mensajes XML hacen que la representación de los datos transferidos sea independiente del Sistema Operativo y del lenguaje de programación utilizados. El servicio puede ser opcionalmente autodescriptivo, es decir, que proporcione información sobre los servicios que dispone, y localizable por mecanismos de descubrimiento (véase WSDL, UDDI y DISCO).

3.3.- Windows Management Instrumentation (WMI)

Se trata de la implementación de Microsoft de la especificación de WBEM (Web-Based Enterprise Management), un estándar concebido para la administración distribuida de entornos de computación. WMI ofrece interfaces de programación para .NET (interoperando con objetos COM) o mediante ODBC, entre otros, para llevar a cabo diferentes tareas de administración. Aquí se emplearán para obtener la información del sistema.

La obtención de datos se realiza por medio de peticiones en lenguaje WQL (WMI Query Language), un subconjunto del ANSI SQL. En dichas peticiones se solicitan instancias de objetos WMI que contienen la información del sistema.

4.- Desarrollo

4.1.- Estructura del sistema

La figura representa la estructura del sistema desarrollado. Las flechas indican las transferencias de datos que se llevan a cabo entre los componentes que integran el sistema.

Estructura del sistema


En el lado del servidor, podemos encontrar la base de datos y el Servidor Web con el motor de ASP.NET que habilita la ejecución del Servicio Web y las páginas activas. Aunque se representen los componentes en un mismo servidor, es posible distribuirlos en diferentes máquinas de forma inmediata con sólo cambiar las referencias existentes entre ellos.

En el lado del cliente, se encuentra la aplicación de extracción de datos que actúa de puente de comunicaciones entre la interfaz de WMI del equipo cliente y el Servicio Web del servidor.

4.2.- Extracción de información del sistema con WMI

En esta sección se describe el proceso programático de extracción de información con WMI y .NET, utilizando un ejemplo en el que se imprimen en la consola algunos parámetros de la BIOS. A pesar de que el código de ejemplo está escrito en lenguaje C#, el procedimiento es exactamente el mismo para el resto de lenguajes de .NET.

Primeramente es necesario incluir los espacios de nombres de administración.

using System.Management;
using System.Management.Instrumentation;

En el código del programa, se instancia un objeto ConnectionOptions con el que es posible establecer las opciones de la conexión WMI. No es necesario cambiar ningún parámetro si se desea realizar la conexión con la identidad del usuario de la máquina. Se instancia también un objeto ManagementScope para fijar el alcance de las operaciones de administración. Al tratarse de la máquina local, basta con fijar el alcance al equipo localhost con las opciones de conexión por defecto.

ConnectionOptions conn_opts = new ConnectionOptions();
ManagementScope mng_scope = new ManagementScope(@"\\localhost", conn_opts);

Se instancia un objeto ObjectQuery que representa la petición a realizar (en el ejemplo, se solicita el objeto Win32_BIOS), y un objeto ManagementObjectSearcher que hará efectiva la petición.

ObjectQuery obj_query = new ObjectQuery("SELECT * FROM Win32_BIOS");
ManagementObjectSearcher obj_searcher = new ManagementObjectSearcher(mng_scope, obj_query);

A continuación, con el método Get del objeto ManagementObjectSearcher se obtiene el conjunto de objetos de administración de WMI solicitados desde el ObjectQuery. El resultado obtenido se recoge en un objeto de tipo ManagementObjectCollection.

ManagementObjectCollection obj_collection = obj_searcher.Get();

Finalmente, se itera sobre los elementos de la colección, extrayendo los atributos deseados ("SerialNumber", "Manufacturer" e "InstallDate") con el operador de indexación.

foreach(ManagementObject mng_obj in obj_collection)
{
System.Console.WriteLine("\nNúmero de serie: " + mng_obj["SerialNumber"]);
System.Console.WriteLine("Fabricante: " + mng_obj["Manufacturer"]);
System.Console.WriteLine("Fecha de instalación: " + mng_obj["InstallDate"]);
}

Las definiciones de las clases de WMI con sus propiedades se encuentran en la página web de WMI en MSDN (ver la sección de enlaces). Como ejemplo, para la clase Win32_BIOS (C++) se muestra la siguiente información.

class Win32_BIOS : CIM_BIOSElement
{
uint16 BiosCharacteristics[];
string BIOSVersion[];
string BuildNumber;
string Caption;
string CodeSet;
string CurrentLanguage;
string Description;
string IdentificationCode;
uint16 InstallableLanguages;
datetime InstallDate;
string LanguageEdition;
string ListOfLanguages[];
string Manufacturer;
string Name;
string OtherTargetOS;
boolean PrimaryBIOS;
datetime ReleaseDate;
string SerialNumber;
string SMBIOSBIOSVersion;
uint16 SMBIOSMajorVersion;
uint16 SMBIOSMinorVersion;
boolean SMBIOSPresent;
string SoftwareElementID;
uint16 SoftwareElementState;
string Status;
uint16 TargetOperatingSystem;
string Version;
};

4.3.- Creación de la base de datos

La información proporcionada por los objetos de WMI es tan extensa que ha sido necesario seleccionar los objetos y atributos más significativos. Posteriormente, se ha adaptado la Base de Datos a la información seleccionada.

Los objetos seleccionados con sus atributos han sido los siguientes:

Por cada dispositivo existe un objeto de WMI asociado a él. Por ejemplo, si el sistema posee dos módulos de memoria física, habrá dos objetos Win32_PhysicalMemory que los representen.

Las figuras siguientes representan los diagramas Entidad-Relación de la Base de Datos generada. Para evitar la ofuscación de los diagramas, aparecen dos entidades "Users" separadas, que tratan de hacer referencia a la misma entidad con el mismo nombre y atributos.

Diagrama E-R 1 Diagrama E-R 2

El script de TransactSQL para la creación de la Base de Datos se encuentra aquí.

4.4.- Servicio Web

El Servicio Web constituye la capa de acceso a datos remotos del sistema. Contiene las funciones de autenticación de usuarios y las funciones de envío y recepción de datos del equipo cliente.

Puesto que la implementación del Servicio Web no es el objetivo de este trabajo, se omitirán sus detalles. Para más información, consultar el código fuente (SystemInfoWS/Service.asmx).

4.5.- Página Web ASP.NET

La página web forma parte de la capa de presentación de la aplicación. No se darán detalles de su implementación (contenida en el directorio SystemInfoSite), pero se describe el funcionamiento de la interfaz desde el punto de vista del usuario.

4.5.1.- Cuentas de usuario

Para asegurar la privacidad de acceso a la información que envían los equipos cliente, se implementa un sistema de cuentas de usuario. Cada cuenta de usuario permitirá registrar la información de un solo equipo, pero se podrán crear tantas cuentas como se desee. La página de registro se encuentra implementada en el fichero SystemInfoSite/Registro.aspx.

Registro
Página web de registro de usuarios.


Registro correcto
Página web de registro correcto.


Autenticacion
Página web de autenticación de usuarios.

4.5.2.- Visualización de la información

La información extraída con la aplicación del cliente puede ser visualizada indistintamente desde el navegador de Internet o desde la propia aplicación. Ambos medios utilizan la página web SystemInfoSite/SystemInfo.aspx adjunta con el código fuente.

4.6.- Aplicación del cliente

En la aplicación del cliente es necesario introducir los datos de autenticación de una cuenta de usuario registrada previamente antes de realizar cualquier transferencia de información. Una vez que el usuario se encuentra autenticado podrá llevar a cabo las operaciones de extracción, envío y visualización de los datos de su equipo.

Autenticacion cliente
Autenticación desde la aplicación del cliente.



informacion cliente
Visualización de información desde la aplicación del cliente.

La aplicación precisa de las referencias web de la página de visualización y del servicio web, por lo que se adjuntan dos ficheros de configuración en donde es posible modificarlas, config.xml y el fichero XML predeterminado de la aplicación.

5.- Descarga del codigo fuente

El código fuente de todo el sistema se encuentra en este fichero (.ZIP). El fichero contiene la solución de Visual Studio 2005 con todos los proyectos implementados: la aplicación del cliente, el Servicio Web, el Sitio Web ASP.NET y las bibliotecas de enlace dinámico empleadas.

6.- Enlaces

Proyecto Mono: http://www.mono-project.com
ECMA 334 (C#): http://www.ecma-international.org/publications/standards/Ecma-334.htm
ECMA 335 (CLI): http://www.ecma-international.org/publications/standards/Ecma-335.htm
Visual Studio 2005 Express: http://www.ecma-international.org/publications/standards/Ecma-335.htm
Microsoft CLR: http://msdn.microsoft.com/netframework/programming/clr/
Windows Management Instrumentation: http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_start_page.asp
W3C Web Services Architecture: http://www.w3.org/TR/ws-arch/
W3C Web Services Activity: http://www.w3.org/2002/ws/

7.- Conclusiones

WMI ofrece un mecanismo de obtención de información fácilmente manejable, a pesar de la gran cantidad de objetos que existen y en los que, en ocasiones, es difícil encontrar la información deseada.

Llaman la atención los atributos de tipo uint32 (enteros de 32 bits sin signo) que, según la documentación de los objetos de WMI, pueden tener valores negativos en algunas circunstancias.

8.- Licencia

Creative Commons License
Este trabajo utiliza una Licencia Creative Commons.

Nota: La licencia de Microsoft Visual Studio 2005 del Academic Alliance sólo permite el desarrollo de software con fines educativos.

Valid XHTML 1.0 Transitional