eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| scan_ficha_attachments_metadata | function | py | cybersecurity | 1.0.0 | impure | def scan_ficha_attachments_metadata(attachments_dir: str) -> dict | Orquestador OSINT pasivo: recorre un directorio de attachments de una ficha (imagenes y PDFs), extrae sus metadatos componiendo extract_exif_metadata (imagenes .jpg/.jpeg/.png/.heic) y extract_pdf_metadata (.pdf), y agrega los puntos GPS y las fechas encontradas. Devuelve files + gps_points + dates + summary. |
|
|
false | error_go_core |
|
|
dict con files (lista de {path, type, metadata} por archivo procesado: type es 'image' o 'pdf'), gps_points (lista de {file, lat, lon} agregando las coordenadas EXIF), dates (lista de fechas str de EXIF y PDF) y summary ({n_files, n_images, n_pdfs, n_gps_points, n_dates, errors}). Los archivos cuya extraccion falla quedan con metadata={'error': ...} y suman a summary.errors | true |
|
python/functions/cybersecurity/scan_ficha_attachments_metadata_test.py | python/functions/cybersecurity/scan_ficha_attachments_metadata.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from cybersecurity import scan_ficha_attachments_metadata
# Escanea los attachments de una persona en el vault OSINT.
res = scan_ficha_attachments_metadata(
"/home/enmanuel/Obsidian/osint/attachments/personas/juan-perez/"
)
print(res["summary"]) # {'n_files': 7, 'n_images': 5, 'n_pdfs': 2, 'n_gps_points': 2, 'n_dates': 4, 'errors': 0}
for p in res["gps_points"]:
print(p["file"], p["lat"], p["lon"]) # coordenadas extraidas de las fotos
print(res["dates"]) # fechas EXIF + fechas de creacion/modificacion de los PDFs
Cuando usarla
- Cuando montas la ficha OSINT de una persona u organizacion y quieres saber de un vistazo que huella de metadatos dejan los documentos/fotos que ya tienes guardados (donde y cuando se hicieron).
- Antes de publicar/compartir attachments propios: para auditar que GPS y fechas se filtrarian.
- Como paso de enriquecimiento dentro de un pipeline de investigacion, justo despues de descargar los attachments al directorio de la ficha.
Gotchas
- Uso solo para investigacion autorizada. Extraer metadatos de archivos ajenos sin permiso puede ser ilegal segun jurisdiccion. Limitate a tus propios documentos o a material que estes autorizado a analizar.
- Funcion IMPURA: hace I/O sobre el sistema de archivos (recorrido recursivo con
os.walk). Siattachments_dirno existe lanzaNotADirectoryError. - La extraccion por archivo se aisla con try/except: un archivo corrupto no aborta el escaneo, queda con
metadata={"error": ...}y suma asummary.errors. - Solo procesa imagenes .jpg/.jpeg/.png/.heic y PDFs .pdf; el resto se ignora silenciosamente. El soporte real de HEIC/EXIF depende de lo que
extract_exif_metadata(Pillow) pueda abrir en el sistema. - Las fechas se devuelven tal cual las reportan EXIF/PDF (formatos heterogeneos, sin normalizar a ISO).