
استخراج عناوين URL من أرشيفات OSINT للحصول على رؤى أمنية
يستخرج عناوين URL من أرشيفات OSINT للحصول على رؤى أمنية.
Urx هي أداة سطر أوامر مصممة لجمع عناوين URL من أرشيفات OSINT، مثل Wayback Machine و Common Crawl. تم بناؤها باستخدام Rust للكفاءة، وتستفيد من المعالجة غير المتزامنة للاستعلام السريع عن مصادر بيانات متعددة. تعمل هذه الأداة على تبسيط عملية جمع معلومات عناوين URL لنطاق محدد، مما يوفر مجموعة بيانات شاملة يمكن استخدامها لأغراض متنوعة، بما في ذلك الاختبارات الأمنية والتحليل.

# https://crates.io/crates/urx
cargo install urx
# https://formulae.brew.sh/formula/urx
brew install urx
git clone https://github.com/hahwul/urx.git
cd urx
cargo build --release
سيكون الملف الثنائي المُجمّع متاحًا في target/release/urx.
# مسح نطاق واحد
urx example.com
# مسح نطاقات متعددة
urx example.com example.org
# مسح النطاقات من ملف
cat domains.txt | urx
Usage: urx [OPTIONS] [DOMAINS]...
Arguments:
[DOMAINS]... النطاقات لجلب عناوين URL لها
Options:
-c, --config <CONFIG> ملف الإعدادات للتحميل
--provider-config <PATH> ملف إعدادات منفصل للمزوّد يحمل مفاتيح API فقط (الافتراضي: $XDG_CONFIG_HOME/urx/provider-config.toml). CLI/env > provider-config > الإعدادات الرئيسية.
-h, --help طباعة المساعدة
-V, --version طباعة الإصدار
Input Options:
--files <FILES>... قراءة عناوين URL مباشرة من الملفات (يدعم ملفات WARC وURLTeam المضغوطة وملفات النص)
--domain-list <PATH> ملف يحتوي على نطاقات مفصولة بأسطر جديدة للمسح (قابل للتكرار؛ يتم دمجه مع النطاقات الموضعية و stdin؛ التعليقات بـ `#` مسموحة)
Output Options:
-o, --output <OUTPUT> ملف الإخراج لكتابة النتائج
--output-dir <PATH> كتابة ملف واحد لكل نطاق داخل هذا الدليل (الامتداد يطابق --format). يتعايش مع --output / stdout.
-f, --format <FORMAT> تنسيق الإخراج (مثل "plain" أو "json" أو "csv") [الافتراضي: plain]
--merge-endpoint دمج نقاط النهاية ذات المسار نفسه ودمج معاملات URL
--normalize-url تسوية عناوين URL لإزالة التكرارات بشكل أفضل (ترتيب معاملات الاستعلام، إزالة الشرطة المائلة اللاحقة)
Provider Options:
--providers <PROVIDERS>
المزوّدون للاستخدام (مفصولة بفواصل، مثل "wayback,cc,otx,arquivo,vt,urlscan") [الافتراضي: wayback,cc,otx]
--exclude-providers <EXCLUDE_PROVIDERS>
المزوّدون لاستبعادهم (مفصولة بفواصل). يفوز عند التعارض مع --providers / --all-providers.
--all-providers
تفعيل كل مزوّد مدعوم. يتم تنشيط المزوّدين الذين يحتاجون مفتاح API فقط عند توفر مفتاح.
--list-providers
سرد كل مزوّد مدعوم ثم الخروج.
--subs
تضمين النطاقات الفرعية عند البحث
--cc-index <CC_INDEX>
فهرس Common Crawl للاستخدام؛ يقبل قائمة مفصولة بفواصل للاستعلام عن عدة فهارس بالتوازي (مثل `CC-MAIN-2026-17,CC-MAIN-2025-51`). `latest` (الافتراضي) يحل الأحدث عبر collinfo.json. [الافتراضي: latest]
--wayback-from <DATE>
تقييد نتائج Wayback Machine باللقطات عند أو بعد DATE (YYYY/YYYYMM/YYYYMMDD/YYYYMMDDhhmmss)
--wayback-to <DATE>
تقييد نتائج Wayback Machine باللقطات عند أو قبل DATE (نفس تنسيق --wayback-from)
--vt-api-key <VT_API_KEY>
مفتاح API لـ VirusTotal (يمكن استخدامه عدة مرات للتدوير، يمكن أيضًا استخدام متغير البيئة URX_VT_API_KEY بمفاتيح مفصولة بفواصل)
--urlscan-api-key <URLSCAN_API_KEY>
مفتاح API اختياري لـ Urlscan؛ يعمل المزوّد أيضًا بشكل مجهول (محدود المعدل ~30 طلب/دقيقة لكل IP). يمكن استخدامه عدة مرات للتدوير، أو عبر URX_URLSCAN_API_KEY (مفاتيح مفصولة بفواصل)
--github-api-key <GITHUB_API_KEY>
رمز وصول شخصي لمزوّد بحث GitHub Code (يقرأ أيضًا URX_GITHUB_API_KEY، مفصولة بفواصل للتدوير)
Discovery Options:
--exclude-robots استبعاد اكتشاف robots.txt
--exclude-sitemap استبعاد اكتشاف sitemap.xml
Display Options:
-v, --verbose إظهار الإخراج المفصل
--silent الوضع الصامت (لا إخراج)
--no-progress عدم إظهار شريط التقدم
--show-sources شرح عناوين URL المُخرجة بالمزوّدين الذين أعادوها
--stats طباعة ملخص لكل مزوّد إلى stderr في نهاية التشغيل
Filter Options:
-p, --preset <PRESET>
إعدادات التصفية المسبقة (مثل "no-resources,no-images,no-audio,only-js,only-style")
-e, --extensions <EXTENSIONS>
تصفية عناوين URL لتشمل فقط تلك ذات امتدادات محددة (مفصولة بفواصل، مثل "js,php,aspx")
--exclude-extensions <EXCLUDE_EXTENSIONS>
تصفية عناوين URL لاستبعاد تلك ذات امتدادات محددة (مفصولة بفواصل، مثل "html,txt")
--patterns <PATTERNS>
تصفية عناوين URL لتشمل فقط تلك التي تحتوي على أنماط محددة (مفصولة بفواصل)
--exclude-patterns <EXCLUDE_PATTERNS>
تصفية عناوين URL لاستبعاد تلك التي تحتوي على أنماط محددة (مفصولة بفواصل)
--show-only-host
إظهار جزء المضيف فقط من عناوين URL
--show-only-path
إظهار جزء المسار فقط من عناوين URL
--show-only-param
إظهار جزء المعاملات فقط من عناوين URL
--min-length <MIN_LENGTH>
الحد الأدنى لطول URL للتضمين
--max-length <MAX_LENGTH>
الحد الأقصى لطول URL للتضمين
--strict
تطبيق التحقق الدقيق من المضيف (الافتراضي)
Network Options:
--network-scope <NETWORK_SCOPE> التحكم في أي مكونات تنطبق عليها إعدادات الشبكة (all, providers, testers, أو providers,testers) [الافتراضي: all]
--proxy <PROXY> استخدام وكيل لطلبات HTTP (التنسيق: <http://proxy.example.com:8080>)
--proxy-auth <PROXY_AUTH> بيانات اعتماد مصادقة الوكيل (التنسيق: username:password)
--insecure تخطي التحقق من شهادة SSL (قبول الشهادات الموقعة ذاتيًا)
--random-agent استخدام وكيل مستخدم عشوائي لطلبات HTTP
--timeout <TIMEOUT> مهلة الطلب بالثواني [الافتراضي: 120]
--retries <RETRIES> عدد مرات إعادة المحاولة للطلبات الفاشلة [الافتراضي: 2]
--parallel <PARALLEL> الحد الأقصى للنطاقات التي يتم جلبها بشكل متزامن لكل مزوّد (واختبارات URL المتزامنة)؛ يتم مشاركة --rate-limit للمزوّد عبرهم [الافتراضي: 5]
--rate-limit <RATE_LIMIT> حد المعدل (الطلبات في الثانية)
--rate-limit-by <PAIRS> تجاوزات المعدل لكل مزوّد (مثل `vt=1,wayback=10`)؛ يتراجع إلى --rate-limit للمزوّدين غير المدرجين
--max-time <MAX_TIME> سقف عالمي لوقت تعداد المزوّد بالثواني (0 = غير محدود) [الافتراضي: 0]
Testing Options:
--check-status
التحقق من رمز حالة HTTP لعناوين URL المجمعة [الأسماء المستعارة: ----cs]
--include-status <INCLUDE_STATUS>
تضمين عناوين URL ذات رموز حالة HTTP أو أنماط محددة (مثل --is=200,30x) [الأسماء المستعارة: ----is]
--exclude-status <EXCLUDE_STATUS>
استبعاد عناوين URL ذات رموز حالة HTTP أو أنماط محددة (مثل --es=404,50x,5xx) [الأسماء المستعارة: ----es]
--extract-links
استخراج روابط إضافية من عناوين URL المجمعة (يتطلب طلبات HTTP)
# حفظ النتائج في ملف
urx example.com -o results.txt
# الإخراج بتنسيق JSON
urx example.com -f json -o results.json
# تصفية لملفات JavaScript فقط
urx example.com -e js
# استبعاد ملفات HTML والنص
urx example.com --exclude-extensions html,txt
# تصفية لنقاط نهاية API
urx example.com --patterns api,v1,graphql
# استبعاد أنماط محددة
urx example.com --exclude-patterns static,images
# استخدام إعداد تصفية مسبق (مشابه لـ --exclude-extensions=png,jpg,.....)
urx example.com -p no-images
# استخدام مزوّدين محددين
urx example.com --providers wayback,otx
# إضافة مزوّد Arquivo.pt (أرشيف الويب البرتغالي) بدون مفتاح
urx example.com --providers wayback,cc,otx,arquivo
# URLScan تعمل بدون مفتاح (مجهول، محدود المعدل)؛ المفتاح يرفع الحدود فقط
urx example.com --providers urlscan
# استخدام مزوّدي VirusTotal و URLScan
# 1. الإضافة صراحةً إلى المزوّدين (مع مفاتيح API عبر سطر الأوامر)
urx example.com --providers=vt,urlscan --vt-api-key=*** --urlscan-api-key=***
# 2. استخدام متغيرات البيئة لمفاتيح API
URX_VT_API_KEY=*** URX_URLSCAN_API_KEY=*** urx example.com --providers=vt,urlscan
# 3. التمكين التلقائي: يتم إضافة المزوّدين تلقائيًا عند توفير مفاتيح API
urx example.com --vt-api-key=*** --urlscan-api-key=*** # لا حاجة للتحديد في --providers
# 4. تدوير مفاتيح API متعددة (للتخفيف من حدود المعدل)
# استخدام الأعلام المتكررة لمفاتيح متعددة
urx example.com --vt-api-key=key1 --vt-api-key=key2 --vt-api-key=key3
# استخدام متغيرات البيئة بمفاتيح مفصولة بفواصل
URX_VT_API_KEY=key1,key2,key3 URX_URLSCAN_API_KEY=ukey1,ukey2 urx example.com
# الجمع بين أعلام CLI ومتغيرات البيئة (تُستخدم مفاتيح CLI أولاً)
URX_VT_API_KEY=env_key1,env_key2 urx example.com --vt-api-key=cli_key1 --vt-api-key=cli_key2
# يتم تضمين عناوين URL من robots.txt و sitemap.xml افتراضيًا
# استبعاد عناوين URL من ملفات robots.txt
urx example.com --exclude-robots
# استبعاد عناوين URL من sitemap
urx example.com --exclude-sitemap
# تضمين النطاقات الفرعية
urx example.com --subs
# التحقق من حالة عناوين URL المجمعة
urx example.com --check-status
# قراءة عناوين URL مباشرة من ملف نصي
urx --files urls.txt
# الجمع بين إدخال الملف والتصفية
urx --files urls.txt --patterns api,admin -f json
# استخراج روابط إضافية من عناوين URL المجمعة
urx example.com --extract-links
# تكوين الشبكة
urx example.com --proxy http://localhost:8080 --timeout 60 --parallel 10 --insecure
# تصفية متقدمة
urx example.com -e js,php --patterns admin,login --exclude-patterns logout,static --min-length 20
# تصفية بناءً على رمز حالة HTTP
urx example.com --include-status 200,30x,405 --exclude-status 20x
# تعطيل التحقق من المضيف
urx example.com --strict false
# تسوية عناوين URL وإزالة التكرارات
# تسوية عناوين URL عن طريق ترتيب معاملات الاستعلام وإزالة الشرطة المائلة اللاحقة
urx example.com --normalize-url
# الجمع بين التسوية ودمج نقاط النهاية لإزالة التكرارات الشاملة
urx example.com --normalize-url --merge-endpoint
# تسوية عناوين URL مع إدخال ملف
urx --files urls.txt --normalize-url
يدعم Urx التخزين المؤقت لتحسين الأداء في المسوح المتكررة والمسح التدريجي لاكتشاف عناوين URL الجديدة فقط.
# تمكين التخزين المؤقت باستخدام SQLite (الافتراضي)
urx example.com --cache-type sqlite --cache-path ~/.urx/cache.db
# استخدام Redis للتخزين المؤقت الموزع
urx example.com --cache-type redis --redis-url redis://localhost:6379
# المسح التدريجي - إظهار عناوين URL الجديدة فقط منذ آخر مسح
urx example.com --incremental
# تعيين TTL للذاكرة المؤقتة (مدة الصلاحية) إلى 12 ساعة
urx example.com --cache-ttl 43200
# تعطيل التخزين المؤقت تمامًا
urx example.com --no-cache
# الجمع بين المسح التدريجي والمرشحات
urx example.com --incremental -e js,php --patterns api
# ملف الإعدادات مع إعدادات التخزين المؤقت
urx -c example/config.toml example.com
# المراقبة اليومية - التنبيه فقط على عناوين URL الجديدة
urx target.com --incremental --silent | notify-tool
# معالجة فعالة لقائمة النطاقات
cat domains.txt | urx --incremental --cache-ttl 3600 > new_urls.txt
# مسح فريق موزع باستخدام Redis
urx example.com --cache-type redis --redis-url redis://shared-cache:6379
# إعادة مسح سريعة أثناء التطوير
urx test-domain.com --cache-ttl 300 # ذاكرة مؤقتة لمدة 5 دقائق للتكرارات السريعة
يعمل Urx بشكل جيد في خطوط الأنابيب مع أدوات الأمن والاستطلاع الأخرى:
# البحث عن النطاقات، ثم اكتشاف عناوين URL
echo "example.com" | urx | grep "login" > potential_targets.txt
# الدمج مع أدوات أخرى
cat domains.txt | urx --patterns api | other-tool
تم استلهام Urx من gau (GetAllUrls)، وهي أداة تجلب عناوين URL المعروفة من AlienVault's Open Threat Exchange و Wayback Machine و Common Crawl. بينما تتشارك في وظائف أساسية مماثلة، تم بناء Urx من الصفر باستخدام Rust مع التركيز على الأداء والتزامن وقدرات التصفية الموسعة.
Urx هو مشروع مفتوح المصدر تم إنشاؤه بـ ❤️. إذا كنت ترغب في المساهمة في هذا المشروع، يرجى الاطلاع على CONTRIBUTING.md وتقديم طلب سحب مع محتواك الرائع.