Controla la actividad del usuario en Windows. El server_log_user_activity.py se ejecuta en un ubuntu2204 donde se encuentra el ELK con filebeat para procesar los logs del cliente. El Agente Windows.py se puede compilar a .exe mediante el comando "pyinstaller --onefile --noconsole --icon=AgenteInactividad.ico Agente_Windows.py.py " e instalarse en el Windows del objetivo a monitorizar.
Este agente detecta automáticamente los periodos de inactividad del usuario en equipos Windows y registra un evento cuando el usuario regresa. Los eventos se envían a un servidor remoto en formato JSON compatible con Filebeat y Elasticsearch.
Detectar y registrar eventos de inactividad del usuario en Windows para análisis en sistemas de monitoreo.
Ejemplo Log recogido:
Como se muestra en Kibana una vez procesados los logs por Filebeat:
Puedes copiar el .exe a otros equipos Windows o VPS, ya que no depende de librerías externas ni instalación previa.
Se recomienda probar el script directamente con Python en entorno controlado antes de compilarlo. El script puede ejecutarse de forma manual para ver cómo detecta la inactividad.
-
Monitorea actividad del usuario:
- Pulsaciones de teclado
- Movimiento, clics y scroll del ratón
-
Registra inactividad:
- Si el usuario no realiza acciones durante más de 5 minutos, se marca el inicio del periodo inactivo.
- Al volver, se registra el evento.
-
Envía logs a servidor remoto:
- Logs en formato JSON por HTTPS POST al endpoint
https://IP:PORT/upload. - Usa token de autorización.
- Logs en formato JSON por HTTPS POST al endpoint
- El
.exese registra automáticamente como tarea programada en Windows, la primera vez que se ejecuta. - Se lanza en cada inicio de sesión de usuario.
- Se ejecuta en modo silencioso (sin consola visible).
- Solo requiere conexión HTTPS.
- No necesita que Python esté instalado.
- No deja rastro visual en el escritorio.
Para compilar el agente a .exe desde el código fuente:
pyinstaller --onefile --noconsole --icon=AgenteInactividad.ico Agente_Windows.py
---
## 📝 Ejemplo de evento JSON
```json
{
"@timestamp": "2025-06-17T12:45:23.123Z",
"event": {
"start": "2025-06-17T12:15:23.123Z",
"end": "2025-06-17T12:45:23.123Z",
"duration": 1800000000000
},
"user": { "name": "usuario_actual" },
"host": { "name": "PC-NOMBRE", "ip": "192.168.1.105" },
"lunch_break": true,
"message": "Usuario Mike inactivo de 12:15:23 a 12:45:23 durante 1800s"
}
