lunes, 6 de agosto de 2018

connmon v1.1

Utilizando connmon comprobé que no podía mostrar la ruta del fichero de procesos protegidos, así que para resolverlo he actualizado connmon a la versión v1.1, de forma que pueda mostrar este dato en esos casos. Para que lo anterior funcione es necesario iniciar connmon desde una línea de comandos con permisos de administrador local.

Otra de las mejoras que también he implementado en esta versión es la de identificar las conexiones del sistema (proceso 4) como System en la columna ProcessPath.

La versión v1.1 está disponible en este enlace.

martes, 4 de octubre de 2016

connmon v1.0 - Lista las conexiones actuales

Es muy interesante saber qué proceso se está comunicando con un host remoto en un momento dado, sobre todo en diagnósticos donde existan sospechas de algún troyano.

Existen un par de herramientas muy recomendables para averiguar la información de las conexiones activas que se están produciendo en Windows: netstat y tcpview.

Dando una vuelta a las API's de Windows que utilizan la información de la pila TCP/IP encontré la posibilidad de crear una herramienta que me proporcionara en un momento dado la información realmente relevante para llevar a cabo un diagnóstico como el mencionado antes, de forma rápida y eficiente. Esta información sería: de la parte remota la IP y el puerto, y de la parte cliente el puerto, el ID del proceso cliente y la ubicación de la imagen ejecutable del proceso.

Para ello desarrollé una pequeña herramienta que solo me proporciona esta información: connmon.exe

Y el resultado puede ser así:


De un vistazo vemos que en un momento dado el proceso de experiencia de usuario de NVIDIA se está comunicando con una IP pública (supuestamente de NVIDIA) y Google Earth hace lo mismo con otras IPs (supuestamente de Google).

Si volvemos a ejecutar connmon.exe es muy posible que esta información sea distinta. Sería como hacer una foto de las conexiones actuales y verlas.

De esta forma, en caso de sospecha, connmon.exe nos ayuda a ser rápidos.

Perl6 y la capacidad de los discos

Llevo ya unos meses introducido en el mundo de Perl6 y cada vez me parece más interesante. Ya he contribuido con la traducción de la Introducción a Perl6 y por otro lado he publicado hace poco mi primer módulo de Perl6: FileSystem::Capacity::VolumesInfo.

El objetivo de este módulo es proporcionar información al usuario sobre la capacidad de los puntos de montaje o unidades (dependiendo del sistema operativo) en un momento dado. Esta información servirá de ayuda para tomar medidas cuando estas capacidades están cerca de su límite, como por ejemplo eliminar o mover archivos, y así evitar el colapso de ese punto de montaje o unidad.

Este módulo es muy útil para administradores de sistemas y tengo la idea de complementarlo con más módulos que proporcionen información útil del sistema para hacer la vida más fácil a los sysadmin, pero ¡con Perl6!

Si eres un sysadmin y todavía no has probado Perl6, ¡te animo a ello!

jueves, 28 de julio de 2016

Mini servidor HTTP & CGI con Perl6

Después de preparar la presentación de Una introdución a Perl 6 me llamó mucho la atención las funcionalidades que ofrece Perl6 sobre programación reactiva y gestión de eventos, así que después de mostrar cómo funciona un servidor HTTP con Perl5 me propuse hacerlo también con Perl6.

Con Perl6 es un poco distinto en cuanto a sintaxis y soporte multihilo pero la forma de gestionar HTTP es la misma. En cuanto al soporte multihilo existe la clase IO::Socket::Async.listen que proporciona la creación y puesta a la escucha de sockets asíncronos con soporte multihilo, de forma que por cada conexión crea un hilo alojado en un pool que Perl6 gestiona internamente.

La prueba de concepto la puedes encontrar aquí.

Este mini servidor web funciona en Windows y GNU/Linux con Rakudo Perl6 instalado y un par de módulos de Perl6 (URI y URI::Escape) que interpretan de forma adecuada las URIs que llegan al servidor.

La parte CGI se realiza mediante módulos de Perl6 y con el resto tenemos un servidor web funcional pero muy básico (solo contempla los códigos HTTP 200 y 404).

El frontal se compone de HTML, CSS y Javascript con JQuery para gestionar la conexión asíncrona con el script CGI de Perl6 que hace de servicio web.


sábado, 21 de mayo de 2016

Contando hilos en GNU\Linux

Actualmente estoy bastante interesado en Perl6, sobre todo en la parte de cómo trata la concurrencia y el manejo de hilos. Perl6 incorpora una serie de objetos de alto nivel que facilitan estas situaciones. En este enlace tienes información en relación a ello.

Mientras tanto y realizando pruebas, he visto que en GNU/Linux hay una forma bastante elegante para comprobar el número de hilos abiertos de un script de Perl6 en ejecución, o de cualquier otro proceso:

while sleep 1; do ps -eLf | grep -v grep | grep -c script.pl6; done

Viene a decir: cada segundo (while sleep 1) lista los procesos activos (ps -eLf), no tengas en cuenta el proceso actual de grep (grep -v grep) y busca el número de veces que aparece el texto "script.pl6" (grep -c script.pl6).


domingo, 21 de febrero de 2016

Funcionamiento de un Servidor Web

En éste documento muestro el funcionamiento de un servidor web utilizando Perl; desde cómo crear un socket y ponerlo a la escucha, cómo hablar HTTP de forma básica y cómo utilizar las capacidades multihilo para lograr la máxima rapidez y eficiencia.

lunes, 7 de diciembre de 2015

diresp v3 - Tamaños de directorios más rápido

Después de ver cómo funciona la creación y gestión de múltiples hilos (multithreading) en la API de Windows, decidí aplicarlo a la herramienta diresp, de forma que calcule el espacio de cada directorio actual en su propio hilo. El resultado es significativamente más rápido.

Puedes descargar la versión 3 de diresp (diresp3.exe) desde este enlace.