Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Leer un archivo JSON de eventos con Python

5 tareas · 40 min · Principiante

Martes 11 de mayo. Textiles del Carare, una empresa inventada de tejidos, exportó diez eventos de sus puestos a un archivo JSON, y el turno quiere saber qué contiene sin abrirlo con los ojos línea por línea. Aquí aprendes cómo se ve un JSON, cómo lo lee un guion corto de Python y qué hace ese guion cuando a un evento le falta un campo. Todo es lectura: los guiones corrieron antes, fuera de aquí, y en la consola ves los datos, el código y lo que imprimieron.

0 de 5 · 0%

Objetivo de la sala

Martes 11 de mayo. Textiles del Carare, una empresa inventada de tejidos, exportó diez eventos de sus puestos a un archivo JSON, y el turno quiere saber qué contiene sin abrirlo con los ojos línea por línea. Aquí aprendes cómo se ve un JSON, cómo lo lee un guion corto de Python y qué hace ese guion cuando a un evento le falta un campo. Todo es lectura: los guiones corrieron antes, fuera de aquí, y en la consola ves los datos, el código y lo que imprimieron.

JSON es un formato de texto para datos con estructura. Un objeto va entre llaves y trae pares "clave": valor; una lista va entre corchetes; los valores pueden ser cadenas, números, true, false, null, otros objetos u otras listas. Casi toda herramienta de seguridad que exporta eventos, alertas o inventarios sabe escribirlo.

En Python, json.load(f) lee el archivo abierto y devuelve objetos nativos del lenguaje: un objeto JSON pasa a ser un diccionario (dict), una lista pasa a ser una lista (list), y los textos y números pasan a str e int o float. Después, el campo de un evento se pide por su nombre, como en ev["host"].

Abre la consola y mira cómo empieza eventos.json y cómo termina.

Responde para continuar

eventos.json empieza con un corchete y cada línea es un objeto entre llaves. Tras `eventos = json.load(f)`, ¿qué es `eventos`?

Ver pista de ayuda

Fíjate en el primer y el último carácter del archivo, y en lo que va entre llaves.

Cada evento trae su identificador (id), la hora en UTC (ts), el equipo (host), la cuenta (usuario), el tipo de evento y una severidad con cuatro niveles: baja, media, alta y critica, escrita sin tilde. Como el archivo tiene un evento por línea, buscar un valor con grep equivale a filtrar la lista.

Ver todo con cat eventos.json es razonable con diez eventos; con diez mil ya no, y por eso se escriben guiones. El principio es el mismo: pedir a la lista los elementos cuyo campo vale lo que buscas.

Responde para continuar

Escribe el id del único evento de severidad critica.

Ver pista de ayuda

Prueba `grep critica eventos.json` y mira el comienzo de la línea.

En Python, ev["campo"] falla con un KeyError si ese evento no trae el campo. El mensaje de error dice la línea del guion y el nombre de la clave, pero no cuál de los eventos del archivo la causó. Para saberlo se mira lo que el guion alcanzó a imprimir antes de caer: el último evento impreso salió bien, y el que falló es el que viene justo después en el archivo.

La primera versión del guion imprime una línea por evento. Lee su salida guardada, hasta donde llega, y compárala con el archivo.

Responde para continuar

Escribe el id del evento que hizo fallar a la primera versión del guion.

Ver pista de ayuda

Mira el último evento que alcanzó a imprimir `lee_eventos.py` y busca en `eventos.json` el que viene a continuación.

Un campo ausente no es un archivo roto: es un dato, porque dice que ese tipo de evento no lleva ese campo. Hay tres maneras de seguir leyendo: pedir el campo con ev.get("campo"), que devuelve None si falta en lugar de fallar; envolver todo en un try que descarta lo que falla; o editar el archivo. Solo la primera es honesta con la evidencia, y solo si el guion además deja constancia de lo que no encontró.

La segunda versión del guion usa .get. Lee su código y su salida guardada y fíjate en las dos últimas líneas.

Responde para continuar

La segunda versión no se detiene al llegar a un evento sin el campo. ¿Qué hace bien?

Ver pista de ayuda

Una buena lectura no altera el archivo ni oculta lo que no pudo leer.

Un valor puede ser a su vez un objeto. Aquí origen trae dos campos propios, ip y sitio, y en Python se llega a ellos encadenando nombres: ev["origen"]["ip"]. Es la forma típica de los registros de nube y de EDR, donde casi todo está anidado.

Responde para continuar

Escribe la dirección de origen de los eventos de la cuenta agarzon.

Ver pista de ayuda

Prueba `grep agarzon eventos.json` y lee el campo `ip` dentro de `origen`.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad