- หน้าแรก
- ตัวสร้างทราฟฟิก
- Runner
Runner
runner.sh คือตัวประสานชุดทดสอบที่รันสคริปต์ที่มีหมายเลขกำกับทั้งหมดในไดเรกทอรีชุดทดสอบตามลำดับ บันทึกผลลัพธ์ และจัดเก็บข้อมูลเมตาดาตาของผลลัพธ์ โดยติดตั้งไว้ที่ /opt/traffic-generator/suites/runner.sh บน VM
การใช้งาน
หัวข้อที่มีชื่อว่า “การใช้งาน”runner.sh <suite-name> [--dry-run]อาร์กิวเมนต์:
| อาร์กิวเมนต์ | จำเป็น | คำอธิบาย |
|---|---|---|
suite-name | ใช่ | ชื่อไดเรกทอรีชุดทดสอบ (เช่น web-app-attacks, api-attacks) |
--dry-run | ไม่ | แสดงสิ่งที่จะรันโดยไม่รันสคริปต์จริง |
ตัวอย่าง:
# Run the web-app-attacks suite/opt/traffic-generator/suites/runner.sh web-app-attacks
# Dry-run to preview api-attacks scripts/opt/traffic-generator/suites/runner.sh api-attacks --dry-run
# Run bot simulation/opt/traffic-generator/suites/runner.sh bot-simulationการกำหนดค่า
หัวข้อที่มีชื่อว่า “การกำหนดค่า”config.env
หัวข้อที่มีชื่อว่า “config.env”Runner อ่านค่าการกำหนดค่าจาก /opt/traffic-generator/config.env:
# Required: target FQDN (F5 XC load balancer domain)TARGET_FQDN=demo.example.com
# Optional: direct origin IP for baseline testing (bypasses F5 XC)TARGET_ORIGIN_IP=ไฟล์นี้ถูกเขียนโดยอัตโนมัติระหว่างการ provision ด้วย Terraform จากตัวแปร target_fqdn และ target_origin_ip หากต้องการเปลี่ยนเป้าหมายหลังการ deploy ให้แก้ไขไฟล์นี้โดยตรงบน VM
การแทนที่ตัวแปรสภาพแวดล้อม
หัวข้อที่มีชื่อว่า “การแทนที่ตัวแปรสภาพแวดล้อม”ตัวแปรใดก็ตามใน config.env สามารถแทนที่ได้โดยการ export ก่อนรันชุดทดสอบ:
# Override target FQDN for a single runTARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# Override via exportexport TARGET_FQDN=staging.example.com/opt/traffic-generator/suites/runner.sh web-app-attacksเส้นทางของไฟล์การกำหนดค่าเองก็สามารถแทนที่ได้เช่นกัน:
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacksโหมด Dry-Run
หัวข้อที่มีชื่อว่า “โหมด Dry-Run”แฟล็ก --dry-run จะแสดงสคริปต์แต่ละตัวที่จะถูกรันโดยไม่รันจริง:
/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: 6Results: /opt/traffic-generator/results/20260425-143000-web-app-attacksใช้ dry-run เพื่อตรวจสอบโครงสร้างชุดทดสอบหลังการ deploy หรือก่อนรันชุดทดสอบกับเป้าหมายใหม่
ไดเรกทอรีผลลัพธ์
หัวข้อที่มีชื่อว่า “ไดเรกทอรีผลลัพธ์”การรันชุดทดสอบแต่ละครั้งจะสร้างไดเรกทอรีผลลัพธ์ที่มีการประทับเวลา:
/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.logstdout และ stderr ของแต่ละสคริปต์จะถูกบันทึกไปยังไฟล์ .log ที่ตั้งชื่อตามสคริปต์นั้น
รูปแบบ meta.json
หัวข้อที่มีชื่อว่า “รูปแบบ meta.json”ไฟล์ 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 | FQDN เป้าหมายที่ใช้ในการรัน |
started | การประทับเวลา UTC เมื่อชุดทดสอบเริ่มต้น |
completed | การประทับเวลา UTC เมื่อชุดทดสอบเสร็จสิ้น |
status | running ระหว่างการรัน, completed เมื่อเสร็จสิ้น |
passed | จำนวนสคริปต์ที่ออกด้วย code 0 |
failed | จำนวนสคริปต์ที่ออกด้วย code ที่ไม่ใช่ศูนย์ |
skipped | จำนวนสคริปต์ที่ถูกข้าม (ไม่สามารถรันได้หรือ dry-run) |
การรันสคริปต์แต่ละตัว
หัวข้อที่มีชื่อว่า “การรันสคริปต์แต่ละตัว”แต่ละสคริปต์สามารถรันแบบ standalone ได้โดยไม่ต้องใช้ runner:
# Run a single script directly/opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
# Run a specific API attack/opt/traffic-generator/suites/api-attacks/01-vampi-owasp-top10.sh demo.example.comสคริปต์รับ FQDN เป้าหมายเป็นอาร์กิวเมนต์ตำแหน่งแรก สคริปต์ไม่ได้อ่าน config.env โดยตรง — เฉพาะ runner เท่านั้นที่ทำ เมื่อรันแบบ standalone คุณต้องส่ง FQDN อย่างชัดเจน
การรันชุดทดสอบทั้งหมดตามลำดับ
หัวข้อที่มีชื่อว่า “การรันชุดทดสอบทั้งหมดตามลำดับ”หากต้องการรันชุดทดสอบทุกชุดต่อเนื่องกัน:
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
หัวข้อที่มีชื่อว่า “การรันจากระยะไกลผ่าน SSH”รันชุดทดสอบจากเครื่องของคุณโดยไม่ต้องคงการเชื่อมต่อ SSH ไว้:
TGEN_IP=$(terraform output -raw public_ip)
# Run a single suitessh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# Run a suite with target overridessh azureuser@${TGEN_IP} 'TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh api-attacks'
# Run in background (disconnection-safe)ssh azureuser@${TGEN_IP} 'nohup /opt/traffic-generator/suites/runner.sh web-app-attacks > /tmp/web-app-attacks.log 2>&1 &'
# Check results laterssh 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 หยุดกระบวนการ:
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# Reattach later to watch progressssh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'ขั้นตอนการรัน
หัวข้อที่มีชื่อว่า “ขั้นตอนการรัน”-
โหลดการกำหนดค่า — Runner อ่าน
config.env(หรือการแทนที่CONFIG_FILE) จากนั้นตรวจสอบTARGET_FQDNในสภาพแวดล้อม -
ตรวจสอบชุดทดสอบ — ยืนยันว่าไดเรกทอรีชุดทดสอบที่ระบุมีอยู่ภายใต้ไดเรกทอรี suites แสดงรายการชุดทดสอบที่มีอยู่หากไม่พบ
-
สร้างไดเรกทอรีผลลัพธ์ — สร้าง
/opt/traffic-generator/results/<timestamp>-<suite>/และเขียนmeta.jsonเริ่มต้นด้วยstatus: running -
รันสคริปต์ — วนซ้ำผ่านไฟล์ที่ตรงกับ
[0-9]*ในไดเรกทอรีชุดทดสอบ เรียงลำดับตามชื่อ ข้ามไฟล์ที่ไม่สามารถรันได้ ส่งTARGET_FQDNเป็นอาร์กิวเมนต์แรก บันทึกผลลัพธ์ไปยัง<script-name>.log -
บันทึกผลลัพธ์ — อัปเดต
meta.jsonด้วยการประทับเวลาการเสร็จสิ้นและจำนวน pass/fail/skip