โปรแกรม AC ที่ฉันทำเพื่อส่งแพ็กเก็ต UDP ไปยัง IP ปลายทางที่ระบุและพอร์ตผ่านซ็อกเก็ตดิบ โปรแกรมนี้รองรับสิ่งต่อไปนี้:
pthreads
(มัลติเธรด)หมายเหตุ - โปรแกรมนี้ไม่รองรับการกระจายตัวของแพ็กเก็ต และไม่มีประเด็นใดที่จะเพิ่มการรองรับนั้น เนื่องจากนั่นไม่ใช่สิ่งที่โปรแกรมนี้สร้างขึ้น
ขณะนี้ฉันกำลังเรียนรู้เพิ่มเติมเกี่ยวกับการตรวจสอบแพ็กเก็ตเชิงลึกพร้อมกับเรียนรู้วิธีการทำงานของการโจมตี (D)DoS ฉันสร้างโปรแกรมนี้และใช้งานบนเครือข่ายท้องถิ่นของฉันเท่านั้น ฉันกำลังวางแผนที่จะสร้างแอปพลิเคชันเซิร์ฟเวอร์ UDP ที่สามารถกรองการโจมตี (D)DoS และบล็อกการโจมตีเหล่านั้นโดยใช้ XDP เมื่อตรวจพบแล้ว เครื่องมือนี้จะใช้เพื่อทดสอบแอปพลิเคชันเซิร์ฟเวอร์ที่ฉันจะสร้าง ในที่สุด ฉันจะสร้างซอฟต์แวร์ที่ทำงานบนเครือข่าย Anycast ของฉันซึ่งสามารถทิ้งการโจมตี (D)DoS ที่ตรวจพบผ่าน XDP บนเซิร์ฟเวอร์ POP ทั้งหมด
ฉันใช้ GCC เพื่อรวบรวมโปรแกรมนี้ คุณต้องเพิ่ม -lpthread
ต่อท้ายคำสั่งเมื่อคอมไพล์ผ่าน GCC
นี่คือตัวอย่าง:
gcc -g UDP_Sender.c -o UDP_Sender -lpthread
การใช้งานมีดังนี้:
Usage: ./UDP_Sender <Source IP> <Destination IP> <Destination IP> [<Max> <Min> <Interval> <Thread Count>]
โปรดทราบว่าช่วงเวลาเป็น ไมโครวินาที เพย์โหลดต่ำสุดและสูงสุดมีหน่วยเป็น ไบต์ หากคุณตั้งค่าช่วงเวลาเป็น 0 จะไม่รอระหว่างการส่งแพ็กเก็ตในแต่ละเธรด
นี่คือตัวอย่าง:
./UDP_Sender 192.168.80.10 10.50.0.4 27015 1000 1200 1000 3
ข้างต้นส่งแพ็กเก็ตอย่างต่อเนื่องไปที่ 10.50.0.4
(พอร์ต 27015
) และปรากฏจาก 192.168.80.10
(ในกรณีของฉันปลอมแปลง) โดยส่งข้อมูลเพย์โหลดขนาด 1000
- 1200
ไบต์ทุกๆ 1000
ไมโครวินาที มันจะส่งแพ็กเก็ตเหล่านี้จาก 3
เธรด
ฉันสามารถพุชได้ประมาณ 300 mbps (~23K PPS) โดยใช้โปรแกรมนี้บนเครือข่ายท้องถิ่นของฉันจนกระทั่งมันโอเวอร์โหลดเราเตอร์และ VM ของฉัน (ฉันมี Edge Router ระดับล่างสุด) โดยไม่ได้กำหนดช่วงเวลาและใช้เธรดเดียว VM ที่ส่งข้อมูลมี 6 vCPU และโปรเซสเซอร์เป็น Intel Xeon รุ่นเก่าที่มีโอเวอร์คล็อกที่ 2.4 GHz VM นี้ยังใช้ CPU ประมาณ 90 - 95% เมื่อให้โปรแกรมนี้ทำงาน
ฉันยังค่อนข้างใหม่กับการเขียนโปรแกรม C และเครือข่าย ดังนั้นฉันแน่ใจว่ามีการปรับปรุงที่สามารถทำได้ หากคุณเห็นสิ่งใดที่สามารถปรับปรุงได้โปรดแจ้งให้เราทราบ :)