
أداة OSINT لـ Reddit عبر اسم المستخدم. اكتشف المنشورات المفهرسة، والتعليقات، والمحتوى المحذوف والمباشر، وأنماط النشاط، والمعرّفات المكشوفة، ودرجة التعرّض الإجمالية.
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 النمطية، رسم بياني، تقييم) كأداة
سطر أوامر مستقلة، مع اختبارات ودعم اختياري للبروكسي.
| المصدر | ما هو | الدور |
|---|---|---|
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. واجهة الـ subreddit الخاصة به تُرجع 404، لذا يخدم المنشورات/التعليقات فقط. |
reddit.com | — | لا يُستعلم منه أبدًا. يُستخدم فقط لبناء روابط permalink في التقرير. لا تُستخدم واجهة Reddit الرسمية (بدون تسجيل دخول)، ولهذا يعمل هذا على الحسابات المعلّقة. |
مقيسًا على حساب عينة حقيقي: أعاد Arctic Shift 39 منشورًا / 139 تعليقًا، وأعاد PullPush
38 منشورًا بمعرّفات متداخلة. Arctic Shift يفوز؛ --source arctic أسرع
وكافٍ.
pip install. مكتبة قياسية فقط.pip install pysocks (اختياري، مطلوب فقط لـ socks5://)pip install -r requirements.txt (FastMCP). أداة سطر الأوامر لا تحتاجه.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،
والنقاط، والتاريخ، والحالة، والرابط الدائم). يحذفه الملخص المعروض على الشاشة حتى لا يُفرغ 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 ولا يُجري أي طلبات.
التدوير. يتم التنقل بين البروكسيات بنظام round-robin. عندما يعود الطلب برمز حظر/تحديد معدل،
يوضع ذلك البروكسي في فترة تهدئة لمدة --cooldown ثانية وينتقل السكربت إلى التالي:
| العلم | الافتراضي | ما يفعله |
|---|---|---|
--proxies FILE | — | قائمة البروكسيات. بدونها: اتصال مباشر. |
--cooldown SECONDS | 30 | المدة التي يبقى فيها البروكسي المحظور جانبًا. |
--max-attempts N | (proxies+1) × 3 | الحد الأقصى للمحاولات لكل طلب قبل الاستسلام. |
--no-direct-fallback | معطّل | الانتظار بدلًا من الاتصال المباشر عندما تكون جميع البروكسيات في فترة التهدئة. |
--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 لا يُدوّر: فهذا طلب سيئ، وليس بروكسي سيئًا، وإعادة المحاولة في مكان آخر لن
تصلحه.
التراجع. بعد الحظر ينتظر min(cooldown, 10 s) — وهذا ينطبق على الاتصالات المباشرة أيضًا،
وهو ما يضرّ أكثر ما يضرّ. إذا استنفدت صفحة محاولاتها، يعيد fetch_all محاولة الصفحة مع
تراجع أُسّي (--rate-limit-retries، محاولتان افتراضيًا = 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 | كل ما عدا ذلك. |
هذا هو جوهر الأداة: يلتقط الأرشيف واقعة الإزالة حتى عندما لا يحتوي على محتوى، وهذا بحد ذاته بيانات وصفية مفيدة.
deleted_pct.total_karma, post_karma, comment_karma, num_posts,
num_comments, earliest_post_at, last_comment_at (من /api/users/search).Americas (UTC-8..UTC-5)Europe / Middle East / Africa (UTC+0..UTC+3)Asia / Oceania (UTC+7..UTC+11)Unknown / distributed