python版DDOS攻击工具脚本

python版DDOS攻击工具脚本代码中有注释说明#!/usr/bin/envpython#-*-coding:UTF-8-*-fromredisimportRedisimporttimefromgurdimport*rdb=Redis(“127.0.0.1”)vips={}defsetOffset(offset): keys=rdb.keys(“*”) min=offset forkeyinkeys: ifkey==”offset”: cont

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

代码中有注释说明

#! /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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157758.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html script 换行,JavaScript中怎么换行

    html script 换行,JavaScript中怎么换行js中换行的方法:1、使用【\n】换行符,代码为【alert(“第一行\n第二行”)】;2、使用【\r】换行符,代码为【alert(“第一行\r第二行”)】;3、使用HTML的【】标签。本教程操作环境:windows7系统、javascript1.8.5版,DELLG3电脑。JavaScript中换行的方法:方法1:使用换行符1、\n换行符在JavaScript中我们可以直接在要换行的地方使用\…

    2025年8月4日
    5
  • 冒泡游戏java_消灭泡泡糖游戏java代码

    冒泡游戏java_消灭泡泡糖游戏java代码对战版

    2025年11月12日
    2
  • cxf实现webservice_产品框架

    cxf实现webservice_产品框架1.WebService与CXF简介1.1WebServiceWebService是一种跨编程语言和跨操作系统平台的远程调用技术。跨编程语言和跨操作平台就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。远程调用就是一台计算机a上的…

    2025年12月11日
    3
  • c语言循环中按键跳出,C语言跳出循环

    c语言循环中按键跳出,C语言跳出循环C语言跳出循环C语言在程序员中备受青睐,成为最近25年使用最为广泛的编程语言。那么大家知道C语言跳出循环是怎么回事呢?下面一起来看看!使用while或for循环时,如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字。break关键字在《C语言switch语句》一节中,我们讲到了break,用它来跳出switch语句。当break关键字用于w…

    2022年5月4日
    105
  • java多线程—Thread.Join()和Thread.Sleep()

    java多线程—Thread.Join()和Thread.Sleep()

    2022年2月24日
    110
  • 唯一约束和唯一索引区别是什么_db2违反唯一索引的约束

    唯一约束和唯一索引区别是什么_db2违反唯一索引的约束1.主键约束(PRIMARY KEY)1)主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。2)是不可能(或很难)更新.3)主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).4)主健可作外健,唯一索引不可;2.唯一性约束(UNIQUE)1)唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段

    2025年12月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号