
Reddit OSINT по имени пользователя. Обнаружение индексированных постов, комментариев, удалённого и активного контента, шаблонов активности, раскрытых идентификаторов и общей оценки экспозиции.
Reddit OSINT по имени пользователя. Укажите имя пользователя, и инструмент вернёт всё, что публичные архивы Reddit проиндексировали для этого аккаунта: посты, комментарии, что было удалено и что всё ещё доступно, паттерны активности, утёкшие идентификаторы и оценку экспозиции.
Без зависимостей, без API-ключей, без входа в систему. Только python3.

python3 reddit_osint.py someuser
Тот же анализ также доступен в виде инструментов MCP для клиентов LLM, см. MCP-сервер.
pip install -r requirements.txt && python mcp_server.py
Reddit удаляет вещи, но сторонние архивы данных сохраняют копию, которая существовала до
удаления (или, по крайней мере, маркер [removed] / [deleted]). Этот инструмент запрашивает эти архивы и
восстанавливает профиль активности аккаунта.
Это предпосылка, лежащая в основе веб-инструмента h3kz-reddint, который является эталоном для этого скрипта:
он перереализует этот конвейер (два источника, слияние, регулярные выражения для PII, граф, оценка) как автономный
CLI, с тестами и опциональной поддержкой прокси.
| Источник | Что это | Роль |
|---|---|---|
Arctic Shift (arctic-shift.photon-reddit.com) | Бесплатный архив Reddit, управляемый сообществом преемник Pushshift. Охватывает 2022→сегодня и сохраняет исходный скрейп (selftext, removed_by_category, media_metadata, flair). Без API-ключа, ограничение скорости на IP. | Основной источник. Предоставляет 100% полезных данных. |
PullPush (api.pullpush.io) | Ещё один индекс тех же данных Reddit (исторические дампы Pushshift). | Резервный. Запрашивается параллельно и объединяется по id. Его API для сабреддитов возвращает 404, поэтому он обслуживает только посты/комментарии. |
reddit.com | — | Никогда не запрашивается. Используется только для построения permalink-URL в отчёте. Официальный API Reddit не используется (без входа), поэтому это работает на заблокированных аккаунтах. |
Измерено на реальном образце аккаунта: Arctic Shift вернул 39 постов / 139 комментариев, PullPush
вернул 38 постов с пересекающимися ID. Arctic Shift побеждает; --source arctic быстрее и
достаточен.
pip install. Только стандартная библиотека.pip install pysocks (опционально, нужно только для socks5://)pip install -r requirements.txt (FastMCP). CLI в этом не нуждается.python3 reddit_osint.py someuser
Выводит отчёт в формате JSON в stdout (только сводка, без пофайлового дампа) и записывает логи в
stderr.
python3 reddit_osint.py someuser --json report.json
python3 reddit_osint.py someuser --json report.json --quiet > /dev/null
report.json включает ключ all_items со всеми постами и комментариями (текст, subreddit,
оценка, дата, статус, permalink). Экранная сводка его опускает, чтобы не выводить 200 КБ.
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, по одному прокси на строку. Поддерживаемые форматы:
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
Дубликаты удаляются. Если файл не содержит валидных прокси, скрипт завершается с кодом 2 и не делает запросов.
Ротация. Прокси перебираются по кругу. Когда запрос возвращает код блокировки/ограничения
частоты, этот прокси отправляется на cooldown на --cooldown секунд, и скрипт переходит к следующему:
| Флаг | По умолчанию | Что делает |
|---|---|---|
--proxies FILE | — | Список прокси. Без него: прямое подключение. |
--cooldown SECONDS | 30 | Как долго забаненный прокси остаётся в стороне. |
--max-attempts N | (proxies+1) × 3 | Потолок попыток на запрос до отказа. |
--no-direct-fallback | выкл. | Ждать вместо прямого подключения, когда все прокси на cooldown. |
--shuffle-proxies | выкл. | Перемешать список при запуске (распределяет нагрузку с первого запроса). |
--proxy-stats | выкл. | Добавляет proxy_stats в отчёт: ok / banned / errors по каждому прокси. |
--rate-limit-retries N | 2 | Повторы всей страницы с экспоненциальной задержкой (30 с, 60 с, максимум 120 с), когда API отвечает 429/422. |
Коды, рассматриваемые как бан (они вызывают ротацию прокси): 401 403 407 422 429 500 502 503 504 520 521 522 523 524, плюс любые 400/409, тело которых содержит slow down / rate limit /
too many requests / timeout. Arctic Shift использует 422 "Timeout. Maybe slow down a bit" для
ограничения частоты, поэтому это намеренно обрабатывается как бан.
404 не вызывает ротацию: это плохой запрос, а не плохой прокси, и повтор в другом месте
это не исправит.
Backoff. После бана скрипт ждёт min(cooldown, 10 s) — это применяется и к прямым подключениям,
где это больнее всего. Если страница исчерпывает свои попытки, fetch_all повторяет страницу с
экспоненциальной задержкой (--rate-limit-retries, 2 попытки по умолчанию = 30 с и 60 с). Именно это
не даёт скрипту молча терять комментарии, когда он упирается в ограничение частоты посреди запуска.
Пример лога с ротацией:
[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)
Когда все прокси находятся в периоде ожидания, скрипт выжидает самый длительный оставшийся период ожидания и повторяет попытку
(или использует прямое соединение, если не был передан --no-direct-fallback).
Предупреждение: прокси — это путь исходящего трафика, который проходит ваш IP-адрес до третьей стороны. Если вы не доверяете поставщику прокси, не используйте его с этим инструментом.
| Переменная | Назначение |
|---|---|
REDDIT_OSINT_ARCTIC | Переопределить URL Arctic Shift (зеркала, тесты). |
REDDIT_OSINT_PULLPUSH | Переопределить URL 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.
| Статус | Обнаружение |
|---|---|
removed | Текст = [removed] или [ Removed by Reddit ], или присутствует removed_by_category (посты) → модератор удалил его. |
deleted | Текст = [deleted] или author == "[deleted]" → автор удалил его. |
live | Всё остальное. |
В этом и заключается весь смысл инструмента: архив фиксирует факт удаления, даже когда содержимое отсутствует, и это само по себе является полезными метаданными.