python实现的防DDoS脚本


Posted in Python onFebruary 08, 2011

这篇博可以说连开场白都可以省掉了,之所以被DDoS,并不是因为惹了疯狗被追着咬,而是因为VC悲剧之后流量全到simplecd来了。
不仅如此,一些笨蛋们在抓站,一些笨蛋们在用迅雷下载,100Mbps的端口居然已经满负荷运作十几个小时了,这是什么概念?100Mbps满负荷1天,流量就是1000G,这样下去不用多久,我就可以等着上百刀的罚单了,泪飙。
此外,100Mbps的速度使得硬盘都快转不动了,严重拖累网站的响应速度,卡得我欲仙欲死啊真是。想当年VC挂了一天,被抓站的家伙们搞得一个礼拜半残废状态(其中那些家伙包括我在内,汗)。simplecd就更支撑不了了。
事实上这种人肉DDoS比正常的DDoS更加难以区分和预防,不过也就只能尽人事,听天命了,参考一些文章写了个python的防止DDoS的脚本,加入cron每分钟执行即可。
实现原理是,查询netstat的连接数,同IP超过一定连接的用iptables封禁一定时间,自动封禁,自动解封。

from subprocess import Popen,PIPE 
import re 
import time 
import sqlite3 
CONCURRENCY_ALLOWED = 30 
OUTDATE_TIME = 86400 
# initializing database 
db = sqlite3.connect("/tmp/ddos.db3") 
c = db.cursor() 
try: 
c.execute("create table ddos (ip text unique,date integer);") 
except: 
print "database exists" 
# blocking ips has more than CONCURRENCY_ALLOWED connections 
pipe = Popen("netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n > /tmp/ddos.txt",shell=True,bufsize=1024,stdout=PIPE).stdout 
#ddos = pipe.read() 
ddos = open("/tmp/ddos.txt").read() 
ct = re.compile(r"(\S+)\s+(\S+).*\n").findall(ddos) 
for count,ip in ct: 
if int(count)>CONCURRENCY_ALLOWED and (ip != "127.0.0.1") and (not ip.startswith("192.168")): 
out = Popen("iptables -I INPUT -s %s -j DROP"%ip,shell=True,bufsize=1024,stdout=PIPE).stdout 
print "blocking %s for %s visits" % (ip,count) 
c.execute('replace into ddos values (?,?)',(ip,int(time.time()))) 
time.sleep(0.1) 
db.commit() 
# unblocking outdated blockings 
c.execute("select * from ddos") 
ddos = c.fetchall() 
for ip,date in ddos: 
if date + OUTDATE_TIME < time.time(): 
c.execute("delete from ddos where ip=?",(ip,)) 
print "unblocking %s" % ip 
out = Popen("iptables -D INPUT -s %s -j DROP"%ip,shell=True,bufsize=1024,stdout=PIPE).stdout 
time.sleep(0.1) 
db.commit()

目前来说这个脚本的效果是0,封了500多号人了,但是还是满速,真是可怕。
24日 更新:
同时用这个脚本,外加转移桌面版的站点到一个10M unlimited的地方以后,似乎天下太平了(吗?)
python实现的防DDoS脚本
Python 相关文章推荐
Python中的XML库4Suite Server的介绍
Apr 14 Python
Python使用metaclass实现Singleton模式的方法
May 05 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
详解python的数字类型变量与其方法
Nov 20 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
pytorch 6 batch_train 批训练操作
May 28 Python
Python中使用ipython的详细教程
Jun 22 Python
python神经网络 使用Keras构建RNN训练
May 04 Python
Python牛刀小试密码爆破
Feb 03 #Python
初学python数组的处理代码
Jan 04 #Python
让python json encode datetime类型
Dec 28 #Python
让python的Cookie.py模块支持冒号做key的方法
Dec 28 #Python
python封装对象实现时间效果
Apr 23 #Python
python下函数参数的传递(参数带星号的说明)
Sep 19 #Python
Python 元类使用说明
Dec 18 #Python
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
发现的以前不知道的函数
2006/09/19 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
Python读取csv文件实例解析
2019/12/30 Python
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
2014年圣诞节促销方案
2014/03/14 职场文书
环保倡议书
2014/04/14 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
工作经验交流材料
2014/12/30 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
Python 阶乘详解
2021/10/05 Python
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA