
OSINT do Reddit por nome de usuário. Descubra posts indexados, comentários, conteúdo excluído e ativo, padrões de atividade, identificadores expostos e uma pontuação geral de exposição.
Reddit OSINT por nome de usuário. Forneça um nome de usuário e ele retorna tudo o que os arquivos públicos do Reddit indexaram para essa conta: posts, comentários, o que foi excluído e o que ainda está ativo, padrões de atividade, identificadores vazados e uma pontuação de exposição.
Sem dependências, sem chaves de API, sem login. Apenas python3.

python3 reddit_osint.py someuser
A mesma análise também está disponível como ferramentas MCP para clientes LLM, consulte servidor MCP.
pip install -r requirements.txt && python mcp_server.py
O Reddit apaga coisas, mas arquivos de dados de terceiros mantêm a cópia que existia antes da
exclusão (ou pelo menos o marcador [removed] / [deleted]). Esta ferramenta consulta esses arquivos e
reconstrói o perfil de atividade de uma conta.
Essa é a premissa por trás da ferramenta web h3kz-reddint, que é a referência para este script:
ela reimplementa esse pipeline (duas fontes, merge, regexes de PII, grafo, score) como uma CLI
autônoma, com testes e suporte opcional a proxy.
| Fonte | O que é | Papel |
|---|---|---|
Arctic Shift (arctic-shift.photon-reddit.com) | Arquivo gratuito do Reddit, sucessor comunitário do Pushshift. Cobre de 2022 até hoje e retém o scrape original (selftext, removed_by_category, media_metadata, flair). Sem chave de API, limite de taxa por IP. | Fonte primária. Fornece 100% dos dados úteis. |
PullPush (api.pullpush.io) | Outro índice dos mesmos dados do Reddit (dumps históricos do Pushshift). | Fallback. Consultado em paralelo e mesclado por id. Sua API de subreddit retorna 404, então só serve posts/comentários. |
reddit.com | — | Nunca consultado. Usado apenas para construir URLs de permalink no relatório. A API oficial do Reddit não é usada (sem login), e é por isso que isso funciona em contas suspensas. |
Medido em uma conta de amostra real: o Arctic Shift retornou 39 posts / 139 comentários, o PullPush
retornou 38 posts com IDs sobrepostos. O Arctic Shift vence; --source arctic é mais rápido e
suficiente.
pip install. Apenas biblioteca padrão.pip install pysocks (opcional, necessário apenas para socks5://)pip install -r requirements.txt (FastMCP). A CLI não precisa disso.python3 reddit_osint.py someuser
Imprime o relatório como JSON em stdout (apenas o resumo, sem o dump por item) e registra em
stderr.
python3 reddit_osint.py someuser --json report.json
python3 reddit_osint.py someuser --json report.json --quiet > /dev/null
report.json inclui a chave all_items com todas as publicações e comentários (texto, subreddit,
pontuação, data, status, permalink). O resumo no ecrã omite-a para não despejar 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, um proxy por linha. Formatos aceitos:
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
Duplicatas são removidas. Se o arquivo não contiver nenhum proxy válido, o script encerra com código 2 e não faz nenhuma requisição.
Rotação. Os proxies são percorridos em round-robin. Quando uma requisição retorna com um código de
bloqueio/limite de taxa, esse proxy entra em cooldown por --cooldown segundos e o script passa para o próximo:
| Flag | Padrão | O que faz |
|---|---|---|
--proxies FILE | — | Lista de proxies. Sem isso: conexão direta. |
--cooldown SECONDS | 30 | Por quanto tempo um proxy banido fica de fora. |
--max-attempts N | (proxies+1) × 3 | Limite de tentativas por requisição antes de desistir. |
--no-direct-fallback | desativado | Espera em vez de conectar diretamente quando todos os proxies estão em cooldown. |
--shuffle-proxies | desativado | Embaralha a lista na inicialização (distribui a carga desde a primeira requisição). |
--proxy-stats | desativado | Adiciona proxy_stats ao relatório: ok / banned / errors por proxy. |
--rate-limit-retries N | 2 | Repetições da página inteira com backoff exponencial (30 s, 60 s, limitado a 120 s) quando a API responde 429/422. |
Códigos tratados como ban (eles rotacionam o proxy): 401 403 407 422 429 500 502 503 504 520 521 522 523 524, além de qualquer 400/409 cujo corpo contenha slow down / rate limit /
too many requests / timeout. O Arctic Shift usa 422 "Timeout. Maybe slow down a bit" para
limite de taxa, então isso é deliberadamente tratado como ban.
Um 404 não rotaciona: isso é uma requisição ruim, não um proxy ruim, e tentar novamente em outro lugar
não vai corrigir isso.
Backoff. Após um ban, ele espera min(cooldown, 10 s) — isso também se aplica a conexões diretas,
que é onde dói mais. Se uma página esgota suas tentativas, fetch_all repete a página com
backoff exponencial (--rate-limit-retries, 2 tentativas por padrão = 30 s e 60 s). É isso que
impede o script de perder comentários silenciosamente quando atinge um limite de taxa no meio da execução.
Exemplo de log com rotação:
[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)
Quando todos os proxies estão em cooldown, o script aguarda o cooldown restante mais longo e tenta novamente
(ou usa uma conexão direta, a menos que --no-direct-fallback tenha sido passado).
Aviso: um proxy é o caminho de saída que o seu IP percorre até um terceiro. Se você não confia no fornecedor do proxy, não use um com esta ferramenta.
| Variável | Propósito |
|---|---|
REDDIT_OSINT_ARCTIC | Substitui a URL do Arctic Shift (espelhos, testes). |
REDDIT_OSINT_PULLPUSH | Substitui a URL do 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.
| Status | Detecção |
|---|---|
removed | Texto = [removed] ou [ Removed by Reddit ], ou removed_by_category presente (posts) → um moderador o removeu. |
deleted | Texto = [deleted] ou author == "[deleted]" → o autor o excluiu. |
live | Todo o resto. |
Este é o ponto central da ferramenta: o arquivo captura o fato da remoção mesmo quando não há conteúdo, e isso por si só já é metadado útil.