domingo, 20 de septiembre de 2015

Inventario de Activos SW/HW automatizado (con netbeans)

Hola amigos(as)  


Felices Fiestas Patrias  a todos :) hay que empezar a bajar la guatita y comer todos los días una manzana para purificar los 35 billones de células que tenemos. :)



En este artículo explicaré cómo desarrollar un inventario de los activos (computadores con sistema operativo Windows) de tu organización. La norma ISO 27002 [1] indica que el objetivo principal de la gestión de Activos es alcanzar y mantener una protección adecuada de los activos de la Organización.  Todos los activos deberían ser justificados, caracterizados, registrados y tener asignado un propietario. 

Lo que hice en la empresa, y así evitar que mi presupuesto de inversión lo pueda derivar a comprar un software de inventario o una asesoría de consultores, (no se enojen, los consultores) fue diseñar un aplicativo que me permitió lo siguiente: 

-Realizar un inventario de todos los computadores, a través de un proceso automático, como tarea programada o generarlo cuando uno lo desee.

-Cuantificar en línea los programas que tienes en cada computador y así validar que usuarios porfiaditos han instalado programas no deseados o sin licencia.  Evitar problemas con ADS .


-Disponer en línea, la historia de los programas en cada computador y validar con los datos históricos versus el actual.  Ejemplo: El computador de la encarga de Inteligencia de negocio, el mes pasado contaba con 10 software y ahora tiene 15. Puedes cotejar los datos contra las facturas de compra de licenciamiento.

-Disponer de las características del Hardware. Mira lo que puedes obtener:


-Obtener información del computador; nombre del equipo, descripción, pack, tipo arquitectura  y versión del sistema operativo.

-Obtener los recursos de la red; dirección IP, descripción del DNS, dominio, usuario, etc.

-Obtener información básica de los discos duros

-Obtener información básica de las impresoras instaladas y otros dispositivos.

-Obtener los procesos actuales que se están ejecutando en el computador.

-Obtener los servicios actuales que se están ejecutando en el computador.

-Puedes también iniciar, pausa, terminar un proceso o servicio.

-Y otras características de información, por ejemplo en la tabla 1,se tiene la salida de inventario del programa agente de Mcafee (antivirus) detectado en mi computador. Observa todo lo que puedes obtener. Además puedes parametrizar si deseas toda la información o acotar por un tipo en particular. 

Tabla 1: Salida de inventario de un programa en particular




Servicio Monitoreo de activos HW /SW

Lo puedes diseñar en Eclipse, NetBeans, Visual Studio .net, o lo que te más te acomode.

En mi caso, lo realicé con NetBeans [2]  (obvio, Java)


Receta:


-Instalar NetBeans IDE con Tomcat

-Instalar base de datos Mysql [3]
-Instalar conector JDBC de mysql [4]
-Wmic (Instrumental de administración de Windows) [5],  Es una aplicación de Microsoft que para nuestro caso nos permite obtener las características de un computador.

Para que lo puedas entender, ejecuta el comando cmd y luego digita lo siguiente:



El comando WMIC[5] se le ha enviado los argumentos "CPU"  y  get, Esto permite obtener el nombre o descripción de la Cpu, es decir con "name". 


1. Vista despliegue

Figura 1

En la figura 1, se tiene que en el computador A (servidor) empieza a establecer una conexión con todos los computadores (computador B). Para ello, se debe contar con una base de datos de las IP o nombres de los computadores residentes en A (base datos Mysql)

En cada computador (B) debes instalar el programa de java que permita realizar el inventario SW/HW. Dejar el programa corriendo siempre en segundo plano.


2. Diseño del Sistema

Crear un modelo de datos relacional, por ejemplo, veamos este bien sencillo, figura 2. En la tabla host tenemos las IP o identificación del host. En la tabla tipo_monitoreo se registra los tipos de inventarios que deseamos realizar. Por ejemplo, inventario de la CPU, Sistema Operativo, Productos Sofware, etc. En la tabla atributo_monitoreo, se tiene el detalle del inventario a realizar de los tipos de monitoreo. Ejemplo: Inventario de la CPU, pero que deseo inventariar, todo o algo en específico?
La tabla movimiento registra el inventario.



Figura 2: Modelo de datos relacional

Los datos quedan de la siguiente manera:  


Figura 3: datos insertados en las tablas del modelo de la figura 2



3. Aplicación Cliente/Servidor instalada en los computadores a inventariar 

En este caso me guíe por la vista de la figura 4 para diseñar el sistema "prototipo inicial". Donde el "Server" estará residente en los computadores de los usuarios y el "Client" debe estar en tu servidor.  (como raro esto aaa!!!)


Figura 4: vista de clases [6] 

4. Programación 

Se crean tres clases para el sistema residente en los computadores de los usuarios.


La clase Conexion permite comunicarse con el gestor de base de datos Mysql. 

La clase Monitoreo permite  realizar el inventario de todos los computadores.

La clase Movimiento permite  almacenar el inventario.




La clase CargaVmic permite comunicarse con el módulo WMIC de microsoft.

La clase MisDatos permite  ejecutar el inventario y llama al método correspondiente de la clase Cargavmic.


Baja aquí el código fuente.  Si tienes dudas del código, escríbeme y te ayudo.

En la figura 5, se presenta la salida de consola que genera el prototipo. Esto permite validar el plan de prueba (unitaria e integral)


Figura 5: salida del sistema


Figura  6: Salida del inventario y registrada en Mysql

En la figura 6, se obtiene que el computador con identificador en "host_id", su CPU se caracteriza como "Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz"

Con los datos almacenados puedes listar los movimientos y gestionar tus activos. Esto a través de una aplicación WEB usando Tomcat.

Información Adicional

La intención de este artículo es que puedas hacer tu propio sistema de inventario de activos SW y HW. Conocer el comando WMIC de microsoft.  Lo presentado esta simplificado ya que he dejado varios detalle fuera. Por ejemplo explicar el código fuentes, pero bájalo y si hay duda me avisas.  Esto no queda acá ya que estoy investigando migrar este sistema a un servicio web del tipo RESTful y así tener información de los equipos por medio de tu equipo móvil (android o IOS)

Nos vemos :)

Biografía

[1]  http://www.iso27000.es/download/ControlesISO27002-2005.pdf

[2]  https://netbeans.org/

[3]  http://www.mysql.com/downloads/

[4]  https://www.mysql.com/products/connector/

[5] https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx
      https://norfipc.com/comandos/informacion-pc-uso-wmic.html

[6] https://netbeans.org/community/articles/interviews/java-se-training-report.html









Enviar mensaje por Correo en forma secuencial

Hola estimados(as) Hoy les dejo un código en Java que permite enviar correos, usando una base de datos, por ejemplo Mysql. Lo que adjunto...