
OSINT de Reddit por nombre de usuario. Descubre publicaciones indexadas, comentarios, contenido eliminado y activo, patrones de actividad, identificadores expuestos y una puntuación general de exposición.
Reddit OSINT por nombre de usuario. Dale un nombre de usuario y devuelve todo lo que los archivos públicos de Reddit han indexado para esa cuenta: publicaciones, comentarios, qué se eliminó y qué sigue activo, patrones de actividad, identificadores filtrados y una puntuación de exposición.
Sin dependencias, sin claves de API, sin inicio de sesión. Solo python3.

python3 reddit_osint.py someuser
El mismo análisis también está disponible como herramientas MCP para clientes LLM, consulte servidor MCP.
pip install -r requirements.txt && python mcp_server.py
Reddit elimina cosas, pero los archivos de datos de terceros conservan la copia que existía antes de la
eliminación (o al menos el marcador [removed] / [deleted]). Esta herramienta consulta esos archivos y
reconstruye el perfil de actividad de una cuenta.
Esa es la premisa detrás de la herramienta web h3kz-reddint, que es la referencia para este script:
reimplementa ese pipeline (dos fuentes, fusión, regex de PII, grafo, puntuación) como una CLI
independiente, con pruebas y soporte opcional de proxy.
| Fuente | Qué es | Rol |
|---|---|---|
Arctic Shift (arctic-shift.photon-reddit.com) | Archivo gratuito de Reddit, sucesor gestionado por la comunidad de Pushshift. Cubre desde 2022 hasta hoy y conserva el scrape original (selftext, removed_by_category, media_metadata, flair). Sin clave de API, límite de tasa por IP. | Fuente principal. Proporciona el 100% de los datos útiles. |
PullPush (api.pullpush.io) | Otro índice de los mismos datos de Reddit (volcados históricos de Pushshift). | Respaldo. Se consulta en paralelo y se fusiona por id. Su API de subreddit devuelve 404, por lo que solo sirve posts/comentarios. |
reddit.com | — | Nunca se consulta. Solo se usa para construir URLs de permalink en el informe. No se usa la API oficial de Reddit (sin inicio de sesión), por lo que funciona en cuentas suspendidas. |
Medido en una cuenta de muestra real: Arctic Shift devolvió 39 posts / 139 comentarios, PullPush
devolvió 38 posts con IDs superpuestos. Gana Arctic Shift; --source arctic es más rápido y
suficiente.
pip install. Solo biblioteca estándar.pip install pysocks (opcional, solo necesario para socks5://)pip install -r requirements.txt (FastMCP). La CLI no lo necesita.python3 reddit_osint.py someuser
Imprime el informe como JSON en stdout (solo el resumen, sin el volcado por elemento) y registra en
stderr.
python3 reddit_osint.py someuser --json report.json
python3 reddit_osint.py someuser --json report.json --quiet > /dev/null
report.json incluye la clave all_items con cada publicación y comentario (texto, subreddit,
puntuación, fecha, estado, permalink). El resumen en pantalla lo omite para no volcar 200 KB.
python3 reddit_osint.py someuser --subreddit dotnet # one subreddit only
python3 reddit_osint.py someuser --keywords "kubernetes" # posts mentioning X
python3 reddit_osint.py someuser --over18 true # NSFW only
python3 reddit_osint.py someuser --source arctic # single source (faster)
python3 reddit_osint.py someuser --max-pages 10 # cap pagination (100 items/page)
python3 reddit_osint.py someuser --delay 1.0 # slower, better with proxies
python3 reddit_osint.py someuser --rate-limit-retries 0 # fail fast when throttled
python3 reddit_osint.py someuser --proxies proxies.txt
proxies.txt, un proxy por línea. Formatos aceptados:
http://1.2.3.4:8080
https://1.2.3.4:8443
socks5://1.2.3.4:1080
socks5://user:[email protected]:1080
1.2.3.4:8080 # no scheme -> assumed http://
# comments and blank lines are ignored
Los duplicados se eliminan. Si el archivo no contiene ningún proxy válido, el script sale con el código 2 y no realiza ninguna solicitud.
Rotación. Los proxies se recorren en round-robin. Cuando una solicitud devuelve un código de bloqueo/límite de tasa,
ese proxy se pone en enfriamiento durante --cooldown segundos y el script pasa al siguiente:
| Flag | Predeterminado | Qué hace |
|---|---|---|
--proxies FILE | — | Lista de proxies. Sin él: conexión directa. |
--cooldown SECONDS | 30 | Cuánto tiempo permanece apartado un proxy bloqueado. |
--max-attempts N | (proxies+1) × 3 | Límite de intentos por solicitud antes de rendirse. |
--no-direct-fallback | desactivado | Esperar en lugar de conectarse directamente cuando todos los proxies están en enfriamiento. |
--shuffle-proxies | desactivado | Mezcla la lista al inicio (reparte la carga desde la primera solicitud). |
--proxy-stats | desactivado | Añade proxy_stats al informe: ok / banned / errors por proxy. |
--rate-limit-retries N | 2 | Reintentos de la página completa con retroceso exponencial (30 s, 60 s, limitado a 120 s) cuando la API responde 429/422. |
Códigos tratados como bloqueo (rotan el proxy): 401 403 407 422 429 500 502 503 504 520 521 522 523 524, más cualquier 400/409 cuyo cuerpo contenga slow down / rate limit /
too many requests / timeout. Arctic Shift usa 422 "Timeout. Maybe slow down a bit" para
el límite de tasa, por lo que se trata deliberadamente como un bloqueo.
Un 404 no rota: eso es una solicitud incorrecta, no un proxy incorrecto, y reintentar en otro lugar no
lo solucionará.
Retroceso. Tras un bloqueo espera min(cooldown, 10 s) — esto también se aplica a las conexiones directas,
que es donde más duele. Si una página agota sus intentos, fetch_all reintenta la página con
retroceso exponencial (--rate-limit-retries, 2 intentos por defecto = 30 s y 60 s). Eso es lo que
evita que el script pierda comentarios silenciosamente cuando alcanza un límite de tasa a mitad de ejecución.
Registro de ejemplo con rotación:
[proxy] http://1.2.3.4:8080 blocked (429), backing off 10s -> rotating
[proxy] http://5.6.7.8:1080 failed (Connection refused), rotating
[proxy] direct connection blocked (422), backing off 10s -> rotating
[!] arctic/comments rate limited, backing off 30s (retry 1/2)
Cuando todos los proxies están en enfriamiento, el script espera el enfriamiento restante más largo y reintenta
(o usa una conexión directa a menos que se haya pasado --no-direct-fallback).
Advertencia: un proxy es la ruta de salida que toma tu IP hacia un tercero. Si no confías en el proveedor del proxy, no uses uno con esta herramienta.
| Variable | Propósito |
|---|---|
REDDIT_OSINT_ARCTIC | Sobrescribe la URL de Arctic Shift (mirrors, pruebas). |
REDDIT_OSINT_PULLPUSH | Sobrescribe la URL de PullPush. |
id, title, selftext, body, author, subreddit, created_utc, score, permalink,
url, over_18, num_comments, link_flair_text, preview.images, media_metadata,
removed_by_category.
| Estado | Detección |
|---|---|
removed | Texto = [removed] o [ Removed by Reddit ], o removed_by_category presente (publicaciones) → un moderador lo eliminó. |
deleted | Texto = [deleted] o author == "[deleted]" → el autor lo eliminó. |
live | Todo lo demás. |
Este es el objetivo principal de la herramienta: el archivo captura el hecho de la eliminación incluso cuando no tiene contenido, y eso por sí solo es metadato útil.