python DDOS攻击脚本(开源)

 
1366 3
晓凤科技实名认证 2022-2-17 08:29:32 来自手机 | 显示全部楼层 |阅读模式
#! /usr/bin/env python
# -*- coding: UTF-8 -*-  
from redis import Redis
import time
from gurd import *
rdb = Redis("127.0.0.1")
vips = {}


def setOffset(offset):
        keys = rdb.keys("*")
        min = offset
        for key in keys:
                if key=="offset":
                        continue
                elif int(key)<min:
                        min = int(key)
        if offset > min:
                rdb.set("offset",min)
                time.sleep(5)



def main():
        icmp = {}
        udp = {}
        http = {}
        syn = {}
        count = 0
        offset = int(rdb.incr("offset"))-1
        data = rdb.hgetall(offset)
        for key in data.keys():
                if key.endswith("http"):
                        items = key.split("-")
                        if http.has_key(items[1]):
                                http[items[1]] += int(data[key])
                        else:
                                http[items[1]] = int(data[key])
                elif key.endswith("syn"):
                        items = key.split("-")
                        if syn.has_key(items[1]):
                                syn[items[1]] += int(data[key])
                        else:
                                syn[items[1]] = int(data[key])
                elif key.endswith("icmp"):
                        items = key.split("-")
                        if icmp.has_key(items[1]):
                                icmp[items[1]] += int(data[key])
                        else:
                                icmp[items[1]] = int(data[key])
                elif key.endswith("udp"):
                        items = key.split("-")
                        if udp.has_key(items[1]):
                                udp[items[1]] += int(data[key])
                        else:
                                udp[items[1]] = int(data[key])
                elif key.endswith("count"):
                        count += int(data[key])
                else:
                        continue
        count = 0
        #syn flood 判断和检测
        for key in syn.keys():
                if syn[key]<5000:
                        continue
                if http[key]/syn[key]<=3:
                        if vips.has_key(key):
                                vips[key]["attack"] += 1
                                vips[key]["type"] = "syn"
                                vips[key]["count"]+= syn[key]
                                vips[key]["end"]=offset
                        else:
                                # 往列表里添加被攻击VIP,统计被攻击VIP的攻击量,如果一个VIP 持续10未收到攻击则从受攻击VIP列表中移除
                                vips[key]={"attack":10,"type":"syn","count":syn[key],"guard":0,"start":offset,"end":offset}
        # udp flood 判断和检测
        for key in udp.keys():
                if udp[key]<5000:
                        continue
                if vips.has_key(key):
                        vips[key]["attack"] += 1
                        vips[key]["type"] = "udp"
                        vips[key]["count"]+= udp[key]
                        vips[key]["end"]=offset
                else:
                        vips[key]={"attack":10,"type":"syn","count":udp[key],"guard":0,"start":offset,"end":offset}
        # icmp flood 判断和检测
        for key in icmp.keys():
                if icmp[key]<5000:
                        continue
                if vips.has_key(key):
                        vips[key]["attack"] += 1
                        vips[key]["type"] = "icmp"
                        vips[key]["count"]+= icmp[key]
                        vips[key]["end"]=offset
                else:
                        vips[key]={"attack":10,"type":"syn","count":icmp[key],"guard":0,"start":offset,"end":offset}
        # 遍历所有被攻击的VIP,所有的attack减一,attack为0的从受攻击队列中移除
        for key in vips.keys():
                vips[key]["attack"] += -1
                if vips[key]["guard"]==0:
                        print "find ddos attack on %s  from :%d " %(key,vips[key]["start"])
                        addVip(key)
                        # add to guard
                        vips[key]["guard"]=1
                if vips[key]["attack"]==0:
                        # remove from guard and vips
                        delVip(key)
                        print "find ddos attack end on %s time:%d " %(key,vips[key]["end"])
                        vips.pop(key)
        rdb.expire(offset,1)
        while offset < int(time.time()-10):
                offset = int(rdb.incr("offset"))-1
                rdb.expire(offset,1)
        #print "offset:%d time:%d" %(offset,int(time.time()))
        if offset > int(time.time())-5:
                time.sleep(2)
        else:
                setOffset(offset)


while 1:
        try:
                main()
        except:
                rdb = Redis("127.0.0.1")
                vips = {}
                pass
嗜血盟 2022-2-17 14:01:41 来自手机 | 显示全部楼层
楼主可以破盾不
小远实名认证 2022-2-17 18:35:37 来自手机 | 显示全部楼层
嗜血盟 发表于 2022-2-17 14:01
楼主可以破盾不

他这个破不了
嗜血盟 2022-2-20 12:36:00 来自手机 | 显示全部楼层
小远 发表于 2022-2-17 18:35
他这个破不了

好滴吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

晓凤科技

初级红客

关注
  • 31
    主题
  • 11
    粉丝
  • 0
    关注
我是胡锦程,中国晓凤网络安全的创始人,会python等编程语言,懂得kali linux的使用,我时刻准备着,为中国网络安全事业作出贡献。

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行