تخطَّ إلى المحتوى

المُشغِّل

runner.sh هو منسق المجموعات الذي ينفّذ جميع السكريبتات المُرقَّمة في دليل المجموعة بالترتيب، ويلتقط المخرجات، ويسجّل البيانات الوصفية للنتائج. يتم تثبيته في /opt/traffic-generator/suites/runner.sh على الجهاز الافتراضي.

Terminal window
runner.sh <suite-name> [--dry-run]

المعاملات:

المعاملمطلوبالوصف
suite-nameنعماسم دليل المجموعة (مثل: web-app-attacks، api-attacks)
--dry-runلاطباعة ما سيتم تنفيذه دون تشغيل أي سكريبتات

أمثلة:

Terminal window
# تشغيل مجموعة web-app-attacks
/opt/traffic-generator/suites/runner.sh web-app-attacks
# تشغيل تجريبي لمعاينة سكريبتات api-attacks
/opt/traffic-generator/suites/runner.sh api-attacks --dry-run
# تشغيل محاكاة البوت
/opt/traffic-generator/suites/runner.sh bot-simulation

يقرأ المُشغِّل الإعداد من /opt/traffic-generator/config.env:

Terminal window
# مطلوب: النطاق المؤهل بالكامل للهدف (نطاق موازن التحميل F5 XC)
TARGET_FQDN=demo.example.com
# اختياري: عنوان IP المباشر للخادم الأصلي لاختبار الأساس (يتجاوز F5 XC)
TARGET_ORIGIN_IP=

يُكتب هذا الملف تلقائيًا أثناء توفير Terraform من متغيرات target_fqdn وtarget_origin_ip. لتغيير الهدف بعد النشر، يمكن تعديل هذا الملف مباشرةً على الجهاز الافتراضي.

يمكن تجاوز أي متغير في config.env بتصديره قبل تشغيل المجموعة:

Terminal window
# تجاوز النطاق المؤهل بالكامل للهدف لتشغيل واحد
TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# التجاوز عبر التصدير
export TARGET_FQDN=staging.example.com
/opt/traffic-generator/suites/runner.sh web-app-attacks

يمكن أيضًا تجاوز مسار ملف الإعداد نفسه:

Terminal window
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacks

يُطبع الراية --dry-run كل سكريبت كان سيتم تنفيذه دون تشغيله فعليًا:

Terminal window
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-run

المخرجات:

=== 01-sqli.sh ===
[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
=== 02-xss.sh ===
[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/02-xss.sh demo.example.com
=== 03-command-injection.sh ===
[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/03-command-injection.sh demo.example.com
=== 04-path-traversal.sh ===
[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/04-path-traversal.sh demo.example.com
=== 05-nikto-scan.sh ===
[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/05-nikto-scan.sh demo.example.com
=== 06-nuclei-scan.sh ===
[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/06-nuclei-scan.sh demo.example.com
=== Suite Complete ===
Passed: 0 | Failed: 0 | Skipped: 6
Results: /opt/traffic-generator/results/20260425-143000-web-app-attacks

استخدم وضع التشغيل التجريبي للتحقق من بنية المجموعة بعد النشر أو قبل تشغيل مجموعة على هدف جديد.

يُنشئ كل تشغيل للمجموعة دليل نتائج مُؤرَّخًا بالزمن:

/opt/traffic-generator/results/<YYYYMMDD-HHMMSS>-<suite-name>/

البنية:

/opt/traffic-generator/results/20260425-143000-web-app-attacks/
meta.json
01-sqli.sh.log
02-xss.sh.log
03-command-injection.sh.log
04-path-traversal.sh.log
05-nikto-scan.sh.log
06-nuclei-scan.sh.log

يُلتقط الإخراج القياسي والإخراج القياسي للأخطاء لكل سكريبت في ملف .log يحمل اسم السكريبت.

يسجّل ملف meta.json البيانات الوصفية لتنفيذ المجموعة:

{
"suite": "web-app-attacks",
"target": "demo.example.com",
"started": "2026-04-25T14:30:00Z",
"completed": "2026-04-25T14:45:23Z",
"status": "completed",
"passed": 5,
"failed": 1,
"skipped": 0
}
الحقلالوصف
suiteاسم المجموعة
targetالنطاق المؤهل بالكامل للهدف المستخدم في التشغيل
startedالطابع الزمني بتوقيت UTC عند بدء المجموعة
completedالطابع الزمني بتوقيت UTC عند انتهاء المجموعة
statusrunning أثناء التنفيذ، وcompleted عند الانتهاء
passedعدد السكريبتات التي خرجت بالرمز 0
failedعدد السكريبتات التي خرجت برمز غير صفري
skippedعدد السكريبتات التي تم تخطيها (غير قابلة للتنفيذ أو في وضع التشغيل التجريبي)

تشغيل السكريبتات الفردية

Section titled “تشغيل السكريبتات الفردية”

يمكن تنفيذ كل سكريبت بشكل مستقل دون المُشغِّل:

Terminal window
# تشغيل سكريبت واحد مباشرةً
/opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
# تشغيل هجوم API محدد
/opt/traffic-generator/suites/api-attacks/01-vampi-owasp-top10.sh demo.example.com

تقبل السكريبتات النطاق المؤهل بالكامل للهدف كأول معامل موضعي. لا تقرأ config.env مباشرةً — يفعل ذلك المُشغِّل فقط. عند التشغيل المستقل، يجب تمرير النطاق المؤهل بالكامل صراحةً.

تشغيل جميع المجموعات بالتسلسل

Section titled “تشغيل جميع المجموعات بالتسلسل”

لتشغيل كل مجموعة واحدة تلو الأخرى:

Terminal window
for suite in web-app-attacks api-attacks bot-simulation reconnaissance ssl-scanning javascript-exploits traffic-generation; do
echo "========================================="
echo "Starting suite: ${suite}"
echo "========================================="
/opt/traffic-generator/suites/runner.sh "$suite"
echo ""
done

يُولّد هذا حركة مرور شاملة عبر جميع ميزات الأمان في F5 XC. توقّع أن يستغرق التشغيل الكامل من 45 إلى 80 دقيقة حسب أوقات استجابة الهدف.

شغّل المجموعات من جهازك المحلي دون الحاجة إلى الحفاظ على جلسة SSH:

Terminal window
TGEN_IP=$(terraform output -raw public_ip)
# تشغيل مجموعة واحدة
ssh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# تشغيل مجموعة مع تجاوز الهدف
ssh azureuser@${TGEN_IP} 'TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh api-attacks'
# التشغيل في الخلفية (آمن عند قطع الاتصال)
ssh azureuser@${TGEN_IP} 'nohup /opt/traffic-generator/suites/runner.sh web-app-attacks > /tmp/web-app-attacks.log 2>&1 &'
# التحقق من النتائج لاحقًا
ssh azureuser@${TGEN_IP} 'ls -la /opt/traffic-generator/results/ | tail -5'
ssh azureuser@${TGEN_IP} 'cat /opt/traffic-generator/results/$(ls -t /opt/traffic-generator/results/ | head -1)/meta.json'

للمجموعات طويلة التشغيل، استخدم nohup أو tmux لمنع قطع اتصال SSH من إيقاف العملية:

Terminal window
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# إعادة الاتصال لاحقًا لمتابعة التقدم
ssh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'
  1. تحميل الإعداد — يقرأ المُشغِّل config.env (أو تجاوز CONFIG_FILE)، ثم يتحقق من وجود TARGET_FQDN في البيئة.

  2. التحقق من المجموعة — يؤكد وجود دليل المجموعة المُسمَّى ضمن دليل المجموعات. يعرض المجموعات المتاحة إن لم يتم العثور عليها.

  3. إنشاء دليل النتائج — ينشئ /opt/traffic-generator/results/<timestamp>-<suite>/ ويكتب ملف meta.json الأولي بالحالة status: running.

  4. تنفيذ السكريبتات — يتكرر عبر الملفات المطابقة لـ [0-9]* في دليل المجموعة، مرتبةً بالاسم. يتخطى الملفات غير القابلة للتنفيذ. يمرر TARGET_FQDN كأول معامل. يلتقط المخرجات في <script-name>.log.

  5. تسجيل النتائج — يحدّث meta.json بطابع زمني للإتمام وعدد النجاحات/الإخفاقات/المتخطَّيات.