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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lagrange插值法:求拉格朗日插值多项式matlab实现(内附代码及例题)

    lagrange插值法:求拉格朗日插值多项式matlab实现(内附代码及例题)lagrange插值法:求拉格朗日插值多项式matlab实现(内附代码及例题)关于拉格朗日插值法相关理论知识,在这里小编不在赘述,请不明白的小伙伴自行百度。小编只负责给出matlab源码。**例题:**看下面例题(如图):matlab代码:%%%%求拉格朗日多项式及基函数%%%%%%%%LiuDeping%%%%%%%%2020.06.14%%%%%输入的量:

    2025年8月3日
    4
  • jvm的垃圾回收机制_垃圾回收厂

    jvm的垃圾回收机制_垃圾回收厂一、概述我们知道自动的垃圾回收机制是Java语言一个特点,它让我们在写程序的时候不再需要考虑内存管理问题。内存管理实际上就是分配内存和回收内存这两个问题,在上一篇文章我大概介绍了jvm是如何划分内存

    2022年8月16日
    7
  • python批量修改文件夹名称_python文件扩展名主要有

    python批量修改文件夹名称_python文件扩展名主要有1、引言需要把.dat格式转化成.txt格式2、实现##python批量更换后缀名importos#列出当前目录下所有的文件files=os.listdir(‘.’)#print(‘files’,files)forfilenameinfiles:portion=os.path.splitext(filename)#如果后缀是.datifp

    2022年9月23日
    4
  • jenkins之搭建部署

    jenkins之搭建部署25.1CI/CD介绍互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码–>构建–>集成–>测试–>交付–>部署正如你在上图中看到,[持续集成(ContinuousIntegration)]、[持续交付(ContinuousDelivery)]和[持续部署(ContinuousDepl…

    2022年5月5日
    32
  • BD和DVD区域划分

    BD和DVD区域划分BD和DVD区域划分BD:A区:只能是在美国、日本以及香港、台湾等东南亚地区正常播放;B区:只能在欧洲和澳洲等国家正常播放;C区:是在中国大陆、俄罗斯和印度三国才能正常播放。DVD:第一区为:美国、加拿大;第二区为:日本、欧洲、埃及、南非、中东;第三区为:中国台湾、中国香港特别行政区、南韩、东南亚;第四区为:澳洲、新西兰、中南美洲、南太平洋岛屿;第五区为:俄罗斯、蒙古、印度

    2022年7月11日
    34
  • PyCharm激活码永久有效PyCharm2017.2.6激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2017.2.6激活码教程-持续更新,一步到位PyCharm激活码永久有效2017.2.6激活码教程-Windows版永久激活-持续更新,Idea激活码2017.2.6成功激活

    2022年6月19日
    25

发表回复

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

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